【问题标题】:How to iterate values of map in Scala?如何在Scala中迭代map的值?
【发布时间】:2015-12-03 11:27:42
【问题描述】:

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

我想将属于同一键的元素相加,因此,结果是:
Map(2 -> 5,1 -> 3)

请大家帮我解决这个问题,我将不胜感激!

【问题讨论】:

  • 你试过任何代码吗??

标签: scala


【解决方案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) 

【讨论】:

猜你喜欢
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2011-09-25
  • 2021-05-03
  • 1970-01-01
相关资源
最近更新 更多