在scala中追加list的匹配值

时间:2016-10-31 21:22:17

标签: scala list for-loop append immutability

如何附加此列表:

val aList = List(List(8),List(7),List(6),List(4),List(9))

基于:

val aUpdate = List(8,7,4,2,9)

,输出应为:

val aList = List(List(8,8), List(7,7),List(6),List(4),List(9,9))

我原本期望以下代码可以使用:

val aList = for (i <- 1 to 4) aList map (_(i)) {
case if aList map (_(i)) contains aUpdate(i) => ++ List(map.aUpdate(i))

任何人都可以告诉我输出的有效参数是什么?请详细解释它的工作原理。

1 个答案:

答案 0 :(得分:0)

您的代码无效。缺少一些东西,例如case之后的模式标识符,连接之前的列表值,右括号等。

这是一种方法:

val r = (aList zip aUpdate).map {
  case (list, update) if (list.contains(update)) => update :: list
  case (list, update) => list
}

// result: List(List(8, 8), List(7, 7), List(6), List(4), List(9, 9))

将一个列表与另一个列表一起压缩导致成对列表,其中第n对由第一个列表中的第n个元素和第二个列表中的第n个元素组成。现在你可以轻松地做你想做的事了;如果来自aList的元素包含来自aUpdate的元素,则将其添加到列表中,否则(注意第二种情况具有相同的标识符,但没有条件)只返回{{1}中的元素}}