我在 Scala 中有以下可變哈希圖:
HashMap((b,3), (c,4), (a,8), (a,2))
并且需要轉換為以下內容:
HashMap((b,3), (c,4), (a,10))
我需要像 reduceByKey 函式邏輯這樣的東西。
我在這里添加了代碼
def main(args: Array[String]) = {
val m = new mutable.HashMap[String,Tuple2[String,Int]]()
println("Hello, world")
m. =(("xx",("a",2)))
m. =(("uu",("b",3)))
m. =(("zz",("a",8)))
m. =(("yy",("c",4)))
println(m.values)
}
uj5u.com熱心網友回復:
對于 2.13 之前的 Scala 版本,您可以嘗試使用groupBywith map:
m.values
.groupBy(_._1)
.mapValues(_.map(_._2).sum)
uj5u.com熱心網友回復:
聽起來您擁有的不是 hashmap 而是m.valuestype Iterable[Tuple2[String, Int]],這更易于管理。在這種情況下,正如評論中所暗示的那樣,groupMapReduce它可以在一個功能中完成。此函式將“匹配”元素組合在一起,對每個元素應用轉換,然后使用二元運算減少組。
m.values.groupMapReduce(_._1)(_._2)(_ _)
這表示“按元組的第一個元素對值進行分組,然后保留第二個元素(即數字),然后將每個組中的所有數字相加”。這會產生一個從元組的第一個元素到總和的映射。
Map(a -> 10, b -> 3, c -> 4)
請注意,這是一個Map,不一定是一個HashMap。如果你想要一個HashMap(即可變性),你需要自己轉換它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474437.html
標籤:斯卡拉
