2009-06-05 12 views
1

複数の配列を比較し、それらの配列のデータと一致するセットを生成し、配列Aのみでデータセットを生成し、配列Bでは生成しないコードスニペットを記述する必要があります。 C、Dは配列Bではなく、A、C、Dではなく、任意の数の配列を扱うことができます(つまり、動的にループします)。このコードでは、Scalaの匿名関数を使用する必要があります(つまり、Javaのようにループする通常の配列とは異なります)。Scalaでのユニオン、サブセット、およびスーパーセットの処理

答えて

2

私には宿題が好きです。これを行う最も簡単な方法は、配列Aの内容をSetに投げ込み、remove操作を使用することです。これは、O(n)n = \ sum {| A |、| B |、| C |、...}となります。次の解決策は、Arrayだけでなく、任意のIterableに対しても機能します。

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

    case Nil => Nil 
} 
関連する問題