【问题标题】:Scala Maps, merging of multiple maps by key [duplicate]Scala Maps,按键合并多个地图[重复]
【发布时间】:2019-10-20 00:26:45
【问题描述】:

我正在尝试合并具有相同键(帐户 ID)但值不同的不同地图,例如平均支出、最大支出金额和最小支出金额。

val a = Map(account1 -> 350.2, account2 -> 547.5, account3 -> 754.4)

val b = Map(account1 -> 1250, account2 -> 3221.785, account3 -> 2900)

val c = Map(account1 -> 50, account2 -> 21.5, account3 -> 12.7)

我想要:

val d = Map(account1 -> (350.2, 1250 , 50), account2 -> (547.5, 3221.785 , 21.5), ... , ...  )

我还想创建一个类似的列表:

((account1,350.2, 1250 , 50), (account2, 547.5, 3221.785), ... )

任何帮助都会很棒,非常感谢。

【问题讨论】:

    标签: scala dictionary functional-programming


    【解决方案1】:

    here 所述

    // convert maps to seq, to keep duplicate keys and concat
    val merged = Map(1 -> 2).toSeq ++ Map(1 -> 4).toSeq
    // merged: Seq[(Int, Int)] = ArrayBuffer((1,2), (1,4))
    
    // group by key
    val grouped = merged.groupBy(_._1)
    // grouped: scala.collection.immutable.Map[Int,Seq[(Int, Int)]] = Map(1 -> ArrayBuffer((1,2), (1,4)))
    
    
    // remove key from value set and convert to list
    val cleaned = grouped.mapValues(_.map(_._2).toList)
    // cleaned: scala.collection.immutable.Map[Int,List[Int]] = Map(1 -> List(2, 4))
    

    【讨论】:

    • 在我的情况下,帐户是字符串类型,在这种情况下如何合并两个地图?非常感谢您的帮助
    • 您是否尝试过使用字符串并遇到问题?
    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 2021-03-22
    • 2015-12-13
    • 2015-06-21
    • 1970-01-01
    • 2017-08-20
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多