在Scala中总结两个列表的最简单方法?

时间:2011-12-22 08:14:10

标签: scala clojure

我有两个列表,我想将列表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 个答案:

答案 0 :(得分:41)

有两个清单:

(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)

答案 1 :(得分:9)

missingfaktor的回答也是我所建议的。

但你甚至可以改进你的片段以摆脱使用笨拙的_1,_2:

List(1,2) zip List(5,5) map { case (a, b) => a + b }

答案 2 :(得分:3)

另一种简化方法:

import Function.tupled
List(1,2).zip(List(5,5)) map tupled {_ + _}

答案 3 :(得分:0)

在Scalaz:

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

也适用于不同尺寸的列表:List(1,2,3) merge List(5,5)将返回List(6,7,3)