scala 在元组 2 的列表中添加 _2
scala add _2 s in a list of Tuple 2
我在 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)
}
听起来您拥有的不是哈希图,而是 Iterable[Tuple2[String, Int]]
类型的 m.values
,这更易于管理。在那种情况下,正如评论中所暗示的那样,groupMapReduce
在一个函数中完成所有工作。此函数将“匹配”元素组合在一起,对每个元素应用变换,然后使用二元运算减少组。
m.values.groupMapReduce(_._1)(_._2)(_ + _)
这表示“按元组的第一个元素对值进行分组,然后保留第二个元素(即数字),然后将每个组中的所有数字相加”。这会生成一个从元组的第一个元素到总和的映射。
Map(a -> 10, b -> 3, c -> 4)
请注意,这是 Map
,不一定是 HashMap
。如果你想要一个 HashMap
(即可变性),你需要自己转换它。
对于 2.13 之前的 Scala 版本,您可以尝试使用 groupBy
和 map
:
m.values
.groupBy(_._1)
.mapValues(_.map(_._2).sum)
我在 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)
}
听起来您拥有的不是哈希图,而是 Iterable[Tuple2[String, Int]]
类型的 m.values
,这更易于管理。在那种情况下,正如评论中所暗示的那样,groupMapReduce
在一个函数中完成所有工作。此函数将“匹配”元素组合在一起,对每个元素应用变换,然后使用二元运算减少组。
m.values.groupMapReduce(_._1)(_._2)(_ + _)
这表示“按元组的第一个元素对值进行分组,然后保留第二个元素(即数字),然后将每个组中的所有数字相加”。这会生成一个从元组的第一个元素到总和的映射。
Map(a -> 10, b -> 3, c -> 4)
请注意,这是 Map
,不一定是 HashMap
。如果你想要一个 HashMap
(即可变性),你需要自己转换它。
对于 2.13 之前的 Scala 版本,您可以尝试使用 groupBy
和 map
:
m.values
.groupBy(_._1)
.mapValues(_.map(_._2).sum)