Самый простой способ сложить два списка в Scala? - PullRequest
19 голосов
/ 22 декабря 2011

У меня есть два списка, я хочу суммировать каждый элемент в списке A с элементом в списке B, создавая новый список.

Я могу сделать это с:

List(1,2).zip(List(5,5)).map(t => t._1 + t._2)

Есть ли какой-нибудь более простой или аккуратный способ сделать это в Scala?

В Clojure я могу просто сделать:

(map + [1 2 3] [4 5 6])

Ответы [ 4 ]

41 голосов
/ 22 декабря 2011

Для двух списков:

(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)
9 голосов
/ 22 декабря 2011

Я бы порекомендовал и ответ отсутствующего фактора.

Но вы могли бы даже улучшить свой фрагмент кода, чтобы избавиться от использования неуклюжих _1, _2:

List(1,2) zip List(5,5) map { case (a, b) => a + b }
3 голосов
/ 22 декабря 2011

Еще один способ упростить:

import Function.tupled
List(1,2).zip(List(5,5)) map tupled {_ + _}
0 голосов
/ 27 ноября 2014

В Scalaz:

List(1,2) merge List(5,5)

Работает также для списков с различными размерами: List(1,2,3) merge List(5,5) вернет List(6,7,3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...