列表例如:
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
答案 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)))