可能重複:
Best way to merge two maps and sum the values of same key?使用Scala的地圖累積值
我有一大堆的類型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
本身就是一個monoid的時候有一個不同的。
現在,編寫LinkedHashMap
的遞歸實現並不困難,但我認爲必須有一些簡單和更通用的方式來編寫它,可能使用scalaz。有任何想法嗎?
有很多方法可以用Scalaz做到這一點,但是真的很遺憾我們不在集合API的'Map'上有'unionWith'方法。 –