在Scala中,如何合并地图如下?

时间:2014-10-02 03:09:56

标签: scala map scala-collections

我想知道如何在Scala中合并地图。

val prevMap = Map(1-> Set("a"), 2-> Set("b"))
val newMap = Map(2-> Set("a","b"),1-> Set("c"))
val expected = Map(1->Set("a","c"), 2-> Set("a","b"))

基本上,预期的地图是newMap +添加在prev和new

之间具有不同键的所有值

由于

2 个答案:

答案 0 :(得分:3)

使用标准库,像这样,

m1 ++ m2.map { case (k,v) => k -> (v ++ m1.getOrElse(k,Set())) }

考虑第一次出现++,用于追加地图。通过将++中的集合与公用密钥合并,然后对于m1m1中出现的任何密钥,将m2的右操作数的键值对增强++m1中的键值对替换为m2中的键值对; <{1}}中未在m1中出现密钥的密钥值对。

第二次出现m2表示集合联合方法。因此,仅在++中出现的那些键的集合保持不变(使用空集合设置联合)。

答案 1 :(得分:2)

我不知道有一个内置函数(毕竟,它取决于特定的Set值类型)。这是我能够提出的最紧凑的(假设地图被称为ab

(a.keySet | b.keySet) map { k => k -> (a.getOrElse(k, Set.empty) | b.getOrElse(k, Set.empty)) } toMap