如何在Scala中迭代map的值?

时间:2015-12-03 11:27:42

标签: scala

对于值val m = Map(2 ->(3, 2), 1 ->(2, 1))

我想把属于同一个键的元素加起来,结果是:
Map(2 -> 5,1 -> 3)

请各位帮我解决这个问题,我会很感激任何帮助!

1 个答案:

答案 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)