Menu
Coddy logo textTech

Sous-ensemble et sur-ensemble

Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 21 sur 56.

En plus de combiner des ensembles, vous pouvez également les comparer.

isSubset(of:) répond à la question : « est-ce que chacun de mes éléments se trouve également dans l'autre ensemble ? »

let small: Set = [1, 2]
let big:   Set = [1, 2, 3, 4]
small.isSubset(of: big)            // true
big.isSubset(of: small)            // false

isSuperset(of:) est l'inverse, « est-ce que je contiens chaque élément de l'autre ensemble ? » :

big.isSuperset(of: small)          // vrai

isDisjoint(with:) retourne true lorsque les deux ensembles ne partagent aucun élément du tout :

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds)       // true

Ces trois prédicats sont la manière la plus propre d'exprimer des « permissions requises » ou des règles « all-of » / « none-of » sans écrire de boucle manuelle.

challenge icon

Défi

Moyen

Vous vérifiez l'accès à un document. Lisez trois lignes :

  1. Les permissions de l'utilisateur (séparées par des virgules)
  2. Les permissions requises (séparées par des virgules)
  3. Les permissions interdites (séparées par des virgules)

L'accès est accordé à l'utilisateur quand :

  • Ses permissions sont un superset des permissions requises (chaque permission requise est détenue)
  • Ses permissions sont disjointes des permissions interdites

Affichez exactement l'un des messages suivants :

  • granted
  • missing: <...> lorsque des permissions requises sont manquantes (triées, séparées par des virgules). Affichez ceci même si des permissions interdites sont également détenues.
  • forbidden: <...> lorsqu'aucune permission requise n'est manquante mais que des permissions interdites sont détenues (triées, séparées par des virgules)

Pour l'entrée read,write,admin / read,write / delete, la sortie est granted.

Pour l'entrée read / read,write / delete, la sortie est missing: write.

Aide-mémoire

Méthodes de comparaison d'ensembles (Set) en Swift :

let small: Set = [1, 2]
let big:   Set = [1, 2, 3, 4]

small.isSubset(of: big)      // true – chaque élément de small est dans big
big.isSuperset(of: small)    // true – big contient chaque élément de small

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true – aucun élément commun

Essayez vous-même

let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))

// TODO: accordé | manquant : ... | interdit : ...
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux