2009-06-05 25 views
1

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

回答

2

听起来像是对我功课。到目前为止,最简单的方法是将数组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 
}