【发布时间】:2015-12-03 11:27:42
【问题描述】:
对于值 val m = Map(2 ->(3, 2), 1 ->(2, 1))
我想将属于同一键的元素相加,因此,结果是:Map(2 -> 5,1 -> 3)
请大家帮我解决这个问题,我将不胜感激!
【问题讨论】:
-
你试过任何代码吗??
标签: scala
对于值 val m = Map(2 ->(3, 2), 1 ->(2, 1))
我想将属于同一键的元素相加,因此,结果是:Map(2 -> 5,1 -> 3)
请大家帮我解决这个问题,我将不胜感激!
【问题讨论】:
标签: scala
考虑
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)
【讨论】:
mapValues,请查看blog.bruchez.name/2013/02/mapmap-vs-mapmapvalues.html