对于值val m = Map(2 ->(3, 2), 1 ->(2, 1))
我想把属于同一个键的元素加起来,结果是:
Map(2 -> 5,1 -> 3)
请各位帮我解决这个问题,我会很感激任何帮助!
答案 0 :(得分:1)
考虑
m.mapValues { case(x,y) => x+y }
创建一个具有相同键和计算值的新Map
。还要考虑
def f(t: (Int,Int)) = t._1+t._2
所以更简洁的方法包括这个
m.mapValues(f)
注意Decomposing tuples in function arguments有关声明可以从Map
获取元组的函数的详细信息。
更新以下@KevinMeredith的重要提示(请参阅下面的评论中的链接),mapValues
提供了对集合的视图,并且转换需要在引用中透明;因此,作为标准(直观)方法,考虑使用map
对整个键值组进行模式匹配,例如
m.map { case (x,(t1,t2)) => x -> (t1+t2) }
或
m.map { case (k,v) => (k,f(v)) }
或
for ( (x,(t1,t2)) <- m ) yield x -> (t1+t2)