Umgang mit Gewerkschaften, Untergruppen und eine Obermenge in Scala
-
11-09-2019 - |
Frage
Ich brauche einen Code-Schnipsel zu schreiben, das mehr Arrays und produziert den Satz vergleichen wäre, die die Daten in dem Arrays entsprechen, produzieren, die nur in Array A Datensatz, aber nicht in Array B, C, D, in Array B aber nicht in A, C, D, (dh dynamisch geschleift) in der Lage, eine beliebige Anzahl von Arrays zu handhaben. Der Code sollte anonyme Funktionen in Scala verwenden (das heißt nicht eine regelmäßige Anordnung wie Looping wie in Java).
Lösung
Klingt wie Hausaufgaben zu mir. Die mit Abstand einfachste Weg, dies zu tun ist, um den Inhalt der Arrays A in eine Set
zu werfen und die Entfernungsoperation verwenden. Dies wäre O (n) , wobei n = \ sum {| A |, | B |, | C |, ...}. Die folgende Lösung funktioniert für beliebigen Iterable
, nicht nur 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
}