2015-10-26 154 views
1

兩組差異我有兩套(k,v)雙:斯卡拉:通過關鍵

val x = Set((1,2), (2,10), (3,5), (7,15)) 
val y = Set((1,200), (3,500)) 

如何找到鑰匙這兩組的差異,得到:

Set((2,10),(7,15)) 

任何快捷簡單解決方案

回答

3
val ym = y.toMap 
x.toMap.filterKeys(k => !(ym contains k)).toSet 

套沒有鑰匙,地圖做。所以你轉換成地圖。然後,您不能在地圖上創建差異,但可以過濾這些鍵以排除不想要的。然後你完成保存轉換回Set。 (這不是最有效的方式,但它不壞,而且寫起來很容易。)

2

val keys = y.map(_._1).toSet是不可能作爲x中的關鍵字出現的一組鍵(該對中的第一個元素)因此

for (p <- x if !keys(p._1)) yield p 

以及

x.collect { case [email protected](a,b) if !keys(a) => p } 

x.filter (p => !keys(p._1)) 
x.filterNot (p => keys(p._1)) 
0

你可以試試這個:

x filter{ m => y map{_._1} contains m._1} toSet