Teilmenge und Obermenge
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 21 von 56.
Über das Kombinieren von Mengen hinaus können Sie diese auch vergleichen.
isSubset(of:) beantwortet die Frage: „Ist jedes meiner Elemente auch in der anderen Menge enthalten?“
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true
big.isSubset(of: small) // falseisSuperset(of:) ist das Gegenteil, „enthalte ich jedes Element der anderen Menge?“:
big.isSuperset(of: small) // trueisDisjoint(with:) gibt true zurück, wenn die beiden Mengen überhaupt keine Elemente gemeinsam haben:
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // trueDiese drei Prädikate sind der sauberste Weg, um „erforderliche Berechtigungen“ oder „all-of“- / „none-of“-Regeln auszudrücken, ohne eine manuelle Schleife zu schreiben.
Aufgabe
MittelSie überprüfen den Zugriff auf ein Dokument. Lesen Sie drei Zeilen ein:
- Die Berechtigungen des Benutzers (kommagetrennt)
- Die erforderlichen Berechtigungen (kommagetrennt)
- Die verbotenen Berechtigungen (kommagetrennt)
Dem Benutzer wird Zugriff gewährt, wenn:
- Seine Berechtigungen eine Obermenge (superset) der erforderlichen sind (jede erforderliche Berechtigung ist vorhanden)
- Seine Berechtigungen disjunkt zu den verbotenen sind
Geben Sie genau eines der folgenden Ergebnisse aus:
grantedmissing: <...>, wenn erforderliche Berechtigungen fehlen (sortiert, kommagetrennt). Geben Sie dies auch dann aus, wenn zusätzlich verbotene Berechtigungen vorhanden sind.forbidden: <...>, wenn keine erforderlichen Berechtigungen fehlen, aber verbotene Berechtigungen vorhanden sind (sortiert, kommagetrennt)
Für die Eingabe read,write,admin / read,write / delete lautet die Ausgabe granted.
Für die Eingabe read / read,write / delete lautet die Ausgabe missing: write.
Spickzettel
Methoden zum Vergleichen von Sets in Swift:
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true – jedes Element von small ist in big enthalten
big.isSuperset(of: small) // true – big enthält jedes Element von small
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true – keine gemeinsamen ElementeProbier es selbst
let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))
// TODO: granted | missing: ... | forbidden: ...
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