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"]Aufgabe
EinfachLies 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):
Lapsed: <...>> current minus renewedNew: <...>> renewed minus currentStayed: <...>> 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,caraSpickzettel
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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken