Scala Map在键相同时合并并求和值

秦时明月

如何合并如下地图:

val a = Map("a" -> 1, "b" -> 2)
val b = Map("b" -> 3, "c" -> 6)

合并后:

var c = Map("a" -> 1, "b" -> 5, "c" -> 6)
乔丹卡特勒
 val a = Map("a" -> 1, "b" -> 2) 
 val b = Map("b" -> 3, "c" -> 6)
 val c = a.map {
   case (key, value) => key -> (value + b.getOrElse(key, 0))
 } ++ b.filterKeys(bKey => !a.keySet.contains(bKey))

这应该可行,但如果不可行...我刚刚发现我认为您的问题是重复的:合并两个地图并对相同键的值求和的最佳方法?

在那里你会看到其他可能的解决方案是......

(map1.keySet ++ map2.keySet).map {i=> (i,map1.getOrElse(i,0) + map2.getOrElse(i,0))}.toMap


map1 ++ map2.map { case (k,v) => k -> (v + map1.getOrElse(k,0)) }

val m1 = Map(1 -> 1.0, 3 -> 3.0, 5 -> 5.2)
val m2 = Map(0 -> 10.0, 3 -> 3.0)
val merged = (m2 foldLeft m1) (
  (acc, v) => acc + (v._1 -> (v._2 + acc.getOrElse(v._1, 0.0)))
)

和更多

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章