Menu
Coddy logo textTech

Differenz und symmetrische Differenz

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 20 von 56.

Zwei weitere Mengenoperationen vervollständigen das Toolkit.

subtracting gibt die Elemente der ersten Menge zurück, die nicht in der zweiten enthalten sind:

let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b)             // {1, 2}

symmetricDifference gibt die Elemente zurück, die in genau einer der beiden Mengen enthalten sind, niemals in beiden:

a.symmetricDifference(b)     // {1, 2, 5}

Zusammen mit union und intersection decken diese vier jede Mengenalgebra-Frage ab, der Sie im Alltag begegnen werden.

Die Mengenmitgliedschaft ist auch als Filter nützlich: Fragen Sie in O(1) ab, ob ein Wert in einer Menge enthalten ist:

let stopwords: Set = ["the", "a", "an"]
let words = ["the", "cat", "sat", "on", "a", "mat"]
let real = words.filter { !stopwords.contains($0) }
// ["cat", "sat", "on", "mat"]
challenge icon

Aufgabe

Einfach

Lies zwei Zeilen Eingabe ein, jeweils eine kommagetrennte Liste von Strings. Behandle sie jeweils als currentMembers und renewedMembers.

Gib drei Zeilen aus, jeweils alphabetisch sortiert und mit , verbunden (oder leer, wenn keine vorhanden sind):

  1. Lapsed: <...> > current minus renewed
  2. New: <...> > renewed minus current
  3. Stayed: <...> > Schnittmenge der beiden

Für die Eingabe alice,bob,cara in Zeile 1 und bob,cara,dan in Zeile 2 lautet die Ausgabe:

Lapsed: alice
New: dan
Stayed: bob,cara

Spickzettel

subtracting gibt Elemente der ersten Menge zurück, die nicht in der zweiten enthalten sind:

let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b)         // {1, 2}

symmetricDifference gibt Elemente zurück, die in genau einer der beiden Mengen enthalten sind:

a.symmetricDifference(b) // {1, 2, 5}

Verwenden Sie ein Set als O(1)-Filter mit contains:

let stopwords: Set = ["the", "a", "an"]
let words = ["the", "cat", "sat", "on", "a", "mat"]
let real = words.filter { !stopwords.contains($0) }
// ["cat", "sat", "on", "mat"]

Probier es selbst

let current = Set(readLine()!.components(separatedBy: ","))
let renewed = Set(readLine()!.components(separatedBy: ","))

// TODO: Lapsed (current - renewed), New (renewed - current), Stayed (Schnittmenge) ausgeben
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss