【发布时间】:2012-09-11 20:23:48
【问题描述】:
可能重复:
Best way to merge two maps and sum the values of same key?
我有一堆Map[String, Int] 类型的地图。我希望能够在键对应时将它们合并为值的总和。例如,地图上的标准++ 方法给出了
Map("a" -> 1, "b" -> 2) ++ Map("a" -> 3, "c" -> 5)
// Map[String,Int] = Map(a -> 3, b -> 2, c -> 5)
我想定义一个结果会给出的操作
Map("a" -> 1, "b" -> 2) ?? Map("a" -> 3, "c" -> 5)
// Map[String,Int] = Map(a -> 4, b -> 2, c -> 5)
用花哨的说法,Map[A, B] 总是有一个自然的幺半群结构,但是当B 本身就是一个幺半群时,会有一个不同的结构。
现在,为LinkedHashMap 编写递归实现并不难,但我认为必须有一些简单且更通用的方法来编写它,可能使用 scalaz。有什么想法吗?
【问题讨论】:
-
使用 Scalaz 有多种方法可以做到这一点,但很遗憾,我们在 Collections API 中的
Map上没有unionWith方法。