【发布时间】:2011-10-27 21:57:41
【问题描述】:
val map1 = Map(1 -> 9 , 2 -> 20)
val map2 = Map(1 -> 100, 3 -> 300)
我想合并它们,并对相同键的值求和。所以结果将是:
Map(2->20, 1->109, 3->300)
现在我有 2 个解决方案:
val list = map1.toList ++ map2.toList
val merged = list.groupBy ( _._1) .map { case (k,v) => k -> v.map(_._2).sum }
和
val merged = (map1 /: map2) { case (map, (k,v)) =>
map + ( k -> (v + map.getOrElse(k, 0)) )
}
但我想知道是否有更好的解决方案。
【问题讨论】:
-
最简单的是
map1 ++ map2 -
@Seraf 这实际上只是简单地“合并”了地图,忽略重复而不是求和它们的值。
-
@ZeynepAkkalyoncuYilmaz 应该更好地阅读这个问题,羞愧地离开