在Scala中交叉并合并/连接两个映射

前端之家收集整理的这篇文章主要介绍了在Scala中交叉并合并/连接两个映射前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两张看起来像这样的地图.

val m1 = Map(1 -> "One",2 -> "Two",3 -> "Three")
val m2 = Map(2 -> 2.0,3 -> 3.0,4 -> 4.0)

我想基于键获取交集并返回表示合并值的元组.结果看起来像这样.

Map(2 -> (Two,2.0),3 -> (Three,3.0))

我想我可以诉诸类似的东西

val merged = m1 collect {
  case (key,value) if m2.contains(key) => key -> (value,m2(key))
}

但是,没有“更惯用”的方式吗?我的直觉与Set的相似之处

val merged = m1.intersect(m2)

解决方法

m1.keySet.intersect(m2.keySet).map(k => k->(m1(k),m2(k))).toMap
// res0: Map[Int,(String,Double)] = Map(2 -> (Two,3.0))

获取键的交集,然后将它们映射到新的Map.

猜你在找的Scala相关文章