给定集A和B,是否有标准库函数来生成3-ple(A-B,交集,B-A)?

时间:2014-12-18 03:52:32

标签: scala scala-collections

也就是说,我正在寻找标准或准标准(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()相当且效率更高。

2 个答案:

答案 0 :(得分:5)

Scala标准库中没有这样的功能。但是这样做“艰难的”只比“高效的方式”慢两倍,所以我建议不要担心它。

a partition b可用于生成(a & b, a diff b)。)

答案 1 :(得分:0)

一种方法(不要声称它是最好的,甚至是好的)是编写一个返回3个不同值的函数,具体取决于给定元素应该在哪个结果集中,以及那么使用该函数只需groupBy两个集的并集