2015-08-02 3 views
2

Учитывая следующий Scala список:Как суммировать/объединить каждое значение в Список Список в Скале

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

Как я могу получить:

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

возможно использовать zipped.map (_ + _) в списке, который содержит более двух списков? или есть другой способ решить это?

ответ

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) 
+0

спасибо человеку, это действительно работает .. – zunzelf

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) 
+0

что если ar ar e более 3 списков? –

+1

@MateuszDymczyk изменить foldLeft -> уменьшить – blueiur

Смежные вопросы