处理Scala中的联合,子集和超集

时间:2009-06-05 06:04:14

标签: algorithm scala functional-programming set adts

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

1 个答案:

答案 0 :(得分:2)

听起来像是家庭作业。到目前为止,最简单的方法是将数组A的内容抛出到Set并使用remove操作。这将是 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
}