首页 > 解决方案 > Scala Maps,按键合并多个地图

问题描述

我正在尝试合并具有相同密钥(帐户 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), ... )

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

标签: scaladictionaryfunctional-programming

解决方案


如此处所述

// 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))

推荐阅读