【问题标题】:Scala Map merge and sum the value when the key is same [duplicate]当键相同时,Scala Map合并并求和值[重复]
【发布时间】:2018-09-06 14:50:06
【问题描述】:

如何合并如下地图:

val a = Map("a" -> 1, "b" -> 2)
val b = Map("b" -> 3, "c" -> 6)

合并后:

var c = Map("a" -> 1, "b" -> 5, "c" -> 6)

【问题讨论】:

    标签: scala dictionary


    【解决方案1】:
     val a = Map("a" -> 1, "b" -> 2) 
     val b = Map("b" -> 3, "c" -> 6)
     val c = a.map {
       case (key, value) => key -> (value + b.getOrElse(key, 0))
     } ++ b.filterKeys(bKey => !a.keySet.contains(bKey))
    

    这应该可以,但如果不行...我刚刚发现我认为您的问题是重复的:Best way to merge two maps and sum the values of same key?

    在那里你看到其他可能的解决方案是......

    (map1.keySet ++ map2.keySet).map {i=> (i,map1.getOrElse(i,0) + map2.getOrElse(i,0))}.toMap
    
    
    map1 ++ map2.map { case (k,v) => k -> (v + map1.getOrElse(k,0)) }
    
    val m1 = Map(1 -> 1.0, 3 -> 3.0, 5 -> 5.2)
    val m2 = Map(0 -> 10.0, 3 -> 3.0)
    val merged = (m2 foldLeft m1) (
      (acc, v) => acc + (v._1 -> (v._2 + acc.getOrElse(v._1, 0.0)))
    )
    

    还有更多

    【讨论】:

    • 它似乎工作。但是当我尝试将其定义为一个函数时,得到如下错误:错误:重载方法值+带有替代品:[INFO] (x: Double)Double [INFO] (x: Float)Float [INFO] (x: Long)Long [INFO] (x: Int)Long [INFO] (x: Char)Long [INFO ] (x: Short)Long [INFO] (x: Byte)Long [INFO] (x: String)String [INFO] 不能应用于 (AnyVal) [INFO] a.map { case ( key, value) => key -> (value + b.getOrElse(key, 0)) } ++ b.filterKeys(bKey => !a.keySet.contains(bKey))
    • 你能复制粘贴你定义为函数的代码吗
    • 这是定义: val mergeMap = udf( (a:Map[String, Long], b:Map[String, Long]) => a.map { case (key, value) = > key -> (value + b.getOrElse(key, 0)) } ++ b.filterKeys(bKey => !a.keySet.contains(bKey)) )
    • def mapMerge(map1: Map[String, Long], map2: Map[String, Long]): Map[String, Long] = { val map1Keys = map1.keySet map1.map { case (key, value) => key -> (value + map2.getOrElse(key, 0)) } ++ map2.filterKeys(map2Key => !map1Keys.contains(map2Key)) }
    • 是的,它有效!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2013-06-11
    • 2020-02-03
    • 2018-12-05
    • 2016-06-30
    相关资源
    最近更新 更多