1
我需要編寫一個代碼片段來比較多個數組,並生成與那些數組中的數據相匹配的集合,僅在數組A中生成數據集,但不在數組B中生成數據集, C,D在數組B中,但不在A,C,D中,能夠處理任意數量的數組(即動態循環)。代碼應該利用Scala中的匿名函數(即不像Java中的常規數組循環)。在Scala中處理工會,子集和超集
我需要編寫一個代碼片段來比較多個數組,並生成與那些數組中的數據相匹配的集合,僅在數組A中生成數據集,但不在數組B中生成數據集, C,D在數組B中,但不在A,C,D中,能夠處理任意數量的數組(即動態循環)。代碼應該利用Scala中的匿名函數(即不像Java中的常規數組循環)。在Scala中處理工會,子集和超集
聽起來像是對我功課。到目前爲止,最簡單的方法是將數組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
}