斯卡拉:通过关键

问题描述:

两组差异我有两套(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)) 

任何快捷简单解决方案

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

套没有钥匙,地图做。所以你转换成地图。然后,您不能在地图上创建差异,但可以过滤这些键以排除不想要的。然后你完成保存转换回Set。 (这不是最有效的方式,但它不坏,而且写起来很容易。)

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)) 

你可以试试这个:

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