如何在scala中对List列表中的每个值进行求和/组合

时间:2015-08-02 07:35:09

标签: list scala collections

给出以下Scala列表:

val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3"))

我怎样才能得到:

List("a1a2a3","b1b2b3","c1c2c3")

是否可以在包含两个以上列表的列表中使用zipped.map(_ + _)?还是有其他方法可以解决这个问题?

2 个答案:

答案 0 :(得分:8)

您可以使用.transpose方法:

scala> val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3"))
l: List[List[String]] = List(List(a1, b1, c1), List(a2, b2, c2), List(a3, b3, c3))

scala> l.transpose
res0: List[List[String]] = List(List(a1, a2, a3), List(b1, b2, b3), List(c1, c2, c3))

然后映射外部列表,使用String创建每个mkString

scala> l.transpose.map(_.mkString)
res1: List[String] = List(a1a2a3, b1b2b3, c1c2c3)

答案 1 :(得分:1)

其他解决方案

scala> val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3"))
scala> l.reduce[List[String]]{ case (acc, current) => acc zip current map { case (a, b) => a + b } }

res2: List[String] = List(a1a2a3, b1b2b3, c1c2c3)