Manipolazione sindacati, sottoinsiemi e superset a Scala
-
11-09-2019 - |
Domanda
Ho bisogno di scrivere un frammento di codice che confronta array multipli e produrre il set che corrisponde ai dati in tali matrici, produrre i dati impostati solo in array A, ma non nella matrice B, C, D, nella matrice B ma non in a, C, D, essendo in grado di gestire qualsiasi numero di array (cioè dinamicamente loop). Il codice dovrebbe utilizzare funzioni anonime a Scala (vale a dire non come una serie regolare loop come in Java).
Soluzione
Suona come compiti a casa per me. Di gran lunga il modo più semplice per farlo è quello di gettare il contenuto della serie A in un Set
e utilizzare l'operazione di rimozione. Questo sarebbe O (n) , dove n = \ sum {| A |, | B |, | C |, ...}. La seguente soluzione funziona per Iterable
arbitraria, non solo 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
}