如何使用reduce函数从每个内部List中添加每个tuple2的值

时间:2017-06-18 06:43:43

标签: scala

列表例如:

List(List((0,1), (1,2), (0,0), (1,1)),List((0,1), (1,2), (2,2), (3,3)))

预期:

List((0,2), (2,4), (2,2), (4,4))

如何使用reduce函数从每个内部列表中添加每个元组2的值

List(List((0,1), (1,2), (0,0), (1,1)),List((0,1), (1,2), (2,2), (3,3))).reduce((a,b)=>a.zip(b))

我不知道如何实现它,所以请求帮助。 THX

2 个答案:

答案 0 :(得分:4)

你几乎就在那里。压缩列表后,map覆盖它,以便将List[((Int,Int),(Int,Int))]类型的结果列表组合成所需类型List[(Int,Int)]

lst.reduce { (x, y) =>
  x zip y map {case ((a,b),(c,d)) => (a+c,b+d)}
}

如果有不同长度的内部列表,您也可以考虑使用zipAll()

lst.reduce { (x, y) =>
  x.zipAll(y,(0,0),(0,0)).map{case ((a,b),(c,d)) => (a+c,b+d)}
}

答案 1 :(得分:0)

@ jwvh的答案应该足以解决你的问题了。但如果你想尝试另一种方式,那么你也可以尝试以下方式。

val list = List(List((0,1), (1,2), (0,0), (1,1)),List((0,1), (1,2), (2,2), (3,3)))
list.reduce((a,b) => a.zip(b).map(tuple => (tuple._1._1 + tuple._2._1, tuple._1._2 + tuple._2._2)))