Scala:按键区分两组

Scala: difference of two sets by key

我有两套(k,v)对:

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

如何通过key找出这两个集合的不同点,得到:

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 p@(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