scala - Scala 中两个 map 的交集和合并/连接

标签 scala

假设我有两张类似这样的 map 。

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,2.0), 3 -> (Three,3.0))

获取键的交集,然后将它们映射到一个新的Map中。

关于scala - Scala 中两个 map 的交集和合并/连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46552478/

相关文章:

scala - Scala 对象定义中没有父类(super class)名称的 "extends {..}"子句有什么作用?

scala - Play2,斯卡拉 : Loading resources does not work in production mode

scala - Future 和 future 和有什么不一样?

scala - 如何解析日期时间?

function - Scala 函数调用

scala - 获取案例类 "for free"的部分构造函数

scala - 从spark中的json模式动态生成df.select语句

scala - 使用 'type' 关键字和路径相关类型覆盖类型

scala - 使用相同谓词进行细化时,如何使用 Scala 的 Refined 库确保类型安全

scala - 具有部分应用函数的元组类型