也就是说,我正在寻找标准或准标准(Apache Commons,Guava等)库函数,它将有效地产生这个:
def f[T](oldSet: Set[T], newSet: Set[T]): (Set[T], Set[T], Set[T]) = {
val removed = oldSet.diff(newSet)
val kept = oldSet.intersect(newSet)
val added = newSet.diff(oldSet)
(removed, kept, added)
}
显然这并不难写,而且我确信我可以毫不费力地做出或多或少的最佳实现,但是对于我来说,对此的需求已经足够让我感到困惑,我不知道这似乎是一个众所周知的图书馆功能。我错过了什么,或者它真的不存在?
编辑:对于那些指向Scala的标准交叉和差异函数及其运算符等价的人,我很欣赏这个想法,但我已经知道了这些,因为你可以从我在上面的例子中使用它们的事实中看到。我正在寻找一个标准的库函数,它在功能上与上面定义的函数f()相当且效率更高。
答案 0 :(得分:5)
Scala标准库中没有这样的功能。但是这样做“艰难的”只比“高效的方式”慢两倍,所以我建议不要担心它。
(a partition b
可用于生成(a & b, a diff b)
。)
答案 1 :(得分:0)
一种方法(不要声称它是最好的,甚至是好的)是编写一个返回3个不同值的函数,具体取决于给定元素应该在哪个结果集中,以及那么使用该函数只需groupBy
两个集的并集