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.
Probier 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 TrimSuchen in StringsAufteilen und ZusammenfügenTeilstrings ersetzenRückblick – Benutzernamen prüfen4Mengen
Mengen erstellenVereinigung und SchnittmengeSubtraktion und symmetrische DifferenzTeilmenge und ObermengeWiederholung – Tag-Filter7Projekt – Gewohnheitstracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteBereichsmethodenBereiche in SwitchRückblick – Kalender-Raster5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerketten von Map, Filter und ReduceRückblick – WortstatistikÜbe selbstständig: Swift-Playground