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

标签 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 的标准 intersect 和 diff 函数及其等效运算符的人,我很欣赏这个想法,但我已经了解这些,正如您从我在上面的示例中使用它们的事实中看到的那样。我正在寻找一个标准库函数,它在功能上等同于上面定义的函数 f(),并且比上面定义的函数 f() 更高效。

最佳答案

Scala标准库中没有这样的函数。但是,以“困难的方式”执行此操作仅比以“有效的方式”执行速度慢两倍左右,因此我建议不要担心它。

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

关于scala - 给定集合 A 和 B,是否有标准库函数来生成 3-ple(A - B、交集、B - A)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538967/

相关文章:

Scala F 有界类型多态性

scala - 如何编写一个 scala 函数来接受两种类型的参数?

scala - 是否有 Guava MultiSet 和 Table 概念的 Scala 替代品?

scala - 是否有 Scala 版本的 NavigableMap?

java - 从 ListBuffer 中移除元素

Scalastyle bool 表达式可以简化

scala - 这种类型参数语法无法编译的原因是什么?

Scala:避免冗余类型参数

scala - 定义函数引用以保留其参数名称

scala - 为什么对于任何给定的类型参数,类型类只能有一种实现?