【发布时间】:2018-09-06 14:50:06
【问题描述】:
如何合并如下地图:
val a = Map("a" -> 1, "b" -> 2)
val b = Map("b" -> 3, "c" -> 6)
合并后:
var c = Map("a" -> 1, "b" -> 5, "c" -> 6)
【问题讨论】:
标签: scala dictionary
如何合并如下地图:
val a = Map("a" -> 1, "b" -> 2)
val b = Map("b" -> 3, "c" -> 6)
合并后:
var c = Map("a" -> 1, "b" -> 5, "c" -> 6)
【问题讨论】:
标签: scala dictionary
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))
这应该可以,但如果不行...我刚刚发现我认为您的问题是重复的:Best way to merge two maps and sum the values of same key?
在那里你看到其他可能的解决方案是......
(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)))
)
还有更多
【讨论】:
def mapMerge(map1: Map[String, Long], map2: Map[String, Long]): Map[String, Long] = { val map1Keys = map1.keySet map1.map { case (key, value) => key -> (value + map2.getOrElse(key, 0)) } ++ map2.filterKeys(map2Key => !map1Keys.contains(map2Key)) }