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) // falseisSuperset(of:) est l'inverse, « est-ce que je contiens chaque élément de l'autre ensemble ? » :
big.isSuperset(of: small) // vraiisDisjoint(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) // trueCes 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.
Défi
MoyenVous vérifiez l'accès à un document. Lisez trois lignes :
- Les permissions de l'utilisateur (séparées par des virgules)
- Les permissions requises (séparées par des virgules)
- 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 :
grantedmissing: <...>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 communEssayez 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 : ...
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
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots