斯卡拉:通过关键
问题描述:
两组差异我有两套(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