Sottoinsieme e sovrainsieme
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 21 di 56.
Oltre a combinare gli insiemi, puoi anche confrontarli.
isSubset(of:) risponde a «ogni elemento del mio insieme è presente anche nell’altro?»
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true
big.isSubset(of: small) // falseisSuperset(of:) è il contrario: «contengo ogni elemento dell'altro insieme?»:
big.isSuperset(of: small) // trueisDisjoint(with:) restituisce true quando i due insiemi non hanno alcun elemento in comune:
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // trueQuesti tre predicati sono il modo più chiaro per esprimere regole di «permessi richiesti» o «tutti» / «nessuno» senza scrivere un ciclo manuale.
Sfida
MedioStai verificando l'accesso a un documento. Leggi tre righe:
- Le autorizzazioni dell'utente (separate da virgole)
- Le autorizzazioni richieste (separate da virgole)
- Le autorizzazioni vietate (separate da virgole)
L'accesso viene concesso all'utente quando:
- Le sue autorizzazioni sono un superset di quelle richieste (ogni autorizzazione richiesta è presente)
- Le sue autorizzazioni sono disgiunte da quelle vietate
Stampa esattamente uno tra:
grantedmissing: <...>quando mancano autorizzazioni richieste (ordinate, separate da virgole). Stampa questo anche se sono presenti autorizzazioni vietate.forbidden: <...>quando non manca nessuna autorizzazione richiesta, ma sono presenti autorizzazioni vietate (ordinate, separate da virgole)
Per l'input read,write,admin / read,write / delete, l'output è granted.
Per l'input read / read,write / delete, l'output è missing: write.
Provalo tu
let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))
// TODO: granted | missing: ... | forbidden: ...
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle paroleEsercitati da solo: Playground Swift