Ответ 1
Для двух списков:
(List(1,2), List(5,5)).zipped.map(_ + _)
Для трех списков:
(List(1,2), List(5,5), List(9, 4)).zipped.map(_ + _ + _)
Для n списков:
List(List(1, 2), List(5, 5), List(9, 4), List(6, 3)).transpose.map(_.sum)
У меня есть два списка, я хочу суммировать каждый элемент в списке A с элементом в списке B, создавая новый список.
Я могу сделать это с помощью
List(1,2).zip(List(5,5)).map(t => t._1 + t._2)
Есть ли более простой или быстрый способ сделать это в Scala?
В Clojure я могу просто сделать:
(map + [1 2 3] [4 5 6])
Для двух списков:
(List(1,2), List(5,5)).zipped.map(_ + _)
Для трех списков:
(List(1,2), List(5,5), List(9, 4)).zipped.map(_ + _ + _)
Для n списков:
List(List(1, 2), List(5, 5), List(9, 4), List(6, 3)).transpose.map(_.sum)
missingfaktor ответ - это то, что я бы тоже рекомендовал.
Но вы даже можете улучшить свой фрагмент, чтобы избавиться от неуклюжих _1, _2:
List(1,2) zip List(5,5) map { case (a, b) => a + b }
Другой способ упрощения:
import Function.tupled
List(1,2).zip(List(5,5)) map tupled {_ + _}
В Scalaz:
List(1,2) merge List(5,5)
Работает также для списков разных размеров: List(1,2,3) merge List(5,5)
вернет List(6,7,3)