Menu
Coddy logo textTech

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)            // false

isSuperset(of:) ist das Gegenteil, „enthalte ich jedes Element der anderen Menge?“:

big.isSuperset(of: small)          // true

isDisjoint(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)       // true

Diese drei Prädikate sind der sauberste Weg, um „erforderliche Berechtigungen“ oder „all-of“- / „none-of“-Regeln auszudrücken, ohne eine manuelle Schleife zu schreiben.

challenge icon

Aufgabe

Mittel

Sie überprüfen den Zugriff auf ein Dokument. Lesen Sie drei Zeilen ein:

  1. Die Berechtigungen des Benutzers (kommagetrennt)
  2. Die erforderlichen Berechtigungen (kommagetrennt)
  3. 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:

  • granted
  • missing: <...>, 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 Elemente

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: ...
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