2014-10-02 44 views
0

我想知道如何在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 +添加了上一个新

感谢之间不同的密钥所有值

回答

2

我不知道有该内置功能(毕竟,这取决于具体的Set值类型)。这里是最紧凑的,我能够拿出(假设地图被称为ab

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

使用标准库,这样,

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

考虑的++第一次出现,用于追加地图。的++右操作数中的关键值对被合并来自m1组具有共同的键,则对于在m1m2发生的任何键增强型中,操作者++替换m1密钥值对与m2密钥值对; m1中的键值对在m2中未被保存。

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