algorithm - 在 Scala 中处理联合、子集和超集

标签 algorithm scala functional-programming set adts

我需要编写一个代码片段来比较多个数组并生成与这些数组中的数据匹配的集合,只在数组 A 中生成数据集,但不在数组 B、C、D 中生成数据集,而是在数组 B 中生成数据集不在 A、C、D 中,能够处理任意数量的数组(即动态循环)。代码应使用 Scala 中的匿名函数(即不像 Java 中的常规数组循环)。

最佳答案

对我来说听起来像是家庭作业。到目前为止,最简单的方法是将数组 A 的内容放入 Set 并使用删除操作。这将是 O(n),其中 n =\sum { |A|, |B|, |C|, ... }。以下解决方案适用于任意 Iterable,而不仅仅是 Array:

def compareArrays[A](arrs: List[Iterable[A]]) = arrs match {
  case a :: tail => {
    val set = a.foldLeft(Set[A]()) { _ + _ }
    tail.foldLeft(set) { _ -- _ }
  }

  case Nil => Nil
}

关于algorithm - 在 Scala 中处理联合、子集和超集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954451/

相关文章:

algorithm - 二叉搜索树是如何创建的?

scala - Scala 中的动态 mixin - 可能吗?

scala - 将这个 monadic 计数器从 Haskell 转换为 Scala

list - 删除列表中的重复元素

reactjs - 功能组件嵌套 vs. props

arrays - 安排N个人的 session

algorithm - 0-1 重量等于容量而不是小于或等于容量的背包

python - 河内建议的循环(单向)塔?

Scala 和 Map 值

scala - 使用 Akka 在 Scala 上使用 SSL 的 TCP 套接字