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 版本,您可以尝试使用 groupBymap:

m.values
  .groupBy(_._1)
  .mapValues(_.map(_._2).sum)