scala - 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), ... )
任何帮助都会很棒,非常感谢。
解决方案
如此处所述
// 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))
推荐阅读
- javascript - 为什么 MySQL 连接在 nodejs 中丢失?
- handlebars.js - Handlebars helper 用于检查字符串是否不在字符串列表中?
- javascript - JavaScript中有没有办法减少递归函数调用中的调用堆栈大小?
- php - 更改显示的产品数量 WooCommerce 商店问题
- android - 为什么会发生此错误类型不匹配:推断类型是 HomeFragment 但预期上下文
- apache-spark - spark中1个工作节点集群的配置
- java - Android过滤项目列表
- google-sheets - 从雅虎财经获取信息
- python-3.x - 如何在python列表中访问字典中的数据
- angular - minDate 在 bsDatepicker 中引发错误