scala中的列表未获得更新

时间:2017-06-29 05:09:14

标签: scala list tuples foldleft

我是Scala Collections的新手,目前我想将给定的字符串列表分成两个列表(List[String], List[String])的元组,其中包含回文字符串列表和其余输入字符串列表。

例如, 如果输入是List("racecar", "abcd", "lilil", "effg") 输出应为(List("racecar", "lilil"), List("abcd", "effg"))

我有一个使用过滤器的解决方案。但是,目前,尝试使用foldLeft优化我的解决方案。我的新方法如下:

def stringTuples2(strings: List[String]): (List[String], List[String]) = {
strings.foldLeft((List[String](), List[String]()))((b, a) => {
  if (a.equals(a.reverse)) { b._1 :+ a; b }
  else { b._2 :+ a; b }
})}

我不确定,我做错了什么,但此解决方案的输出是两个空列表的元组,即(List(),List())。

帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:8)

您尝试修改b会创建一个新的List,然后将新的List抛弃并返回b,这将保持不变。取出;b部分并返回更新后的元组:(b._1 :+ a, b._2)(b._1, b._2 :+ a)

顺便说一句,这是解决方案的另一种方法。

List("racecar", "abcd", "lilil", "effg").partition(s => s == s.reverse)