2009-06-05 24 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 
}