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
我有两套(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