给出以下Scala列表:
val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3"))
我怎样才能得到:
List("a1a2a3","b1b2b3","c1c2c3")
是否可以在包含两个以上列表的列表中使用zipped.map(_ + _)?还是有其他方法可以解决这个问题?
答案 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)