Podzbiór i nadzbiór
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 21 z 56.
Oprócz łączenia zbiorów możesz je również porównywać.
isSubset(of:) odpowiada na pytanie: „czy każdy z moich elementów znajduje się również w drugim zbiorze?”
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true
big.isSubset(of: small) // falseisSuperset(of:) działa odwrotnie: „czy zawieram każdy element drugiego zbioru?”:
big.isSuperset(of: small) // trueisDisjoint(with:) zwraca true, gdy oba zbiory nie mają żadnych wspólnych elementów:
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // trueTe trzy predykaty to najprostszy sposób na wyrażenie reguł „wymagane uprawnienia”, „wszystkie” lub „żadne” bez pisania ręcznej pętli.
Wyzwanie
ŚredniSprawdzasz dostęp do dokumentu. Odczytaj trzy wiersze:
- Uprawnienia użytkownika (oddzielone przecinkami)
- Wymagane uprawnienia (oddzielone przecinkami)
- Zabronione uprawnienia (oddzielone przecinkami)
Użytkownik otrzymuje dostęp, gdy:
- Jego uprawnienia są nadrzędne wobec wymaganych (ma wszystkie wymagane uprawnienia)
- Jego uprawnienia są rozłączne z zabronionymi
Wypisz dokładnie jedną z wartości:
grantedmissing: <...>, gdy brakuje wymaganych uprawnień (posortowanych i oddzielonych przecinkami). Wypisz to nawet wtedy, gdy użytkownik ma również zabronione uprawnienia.forbidden: <...>, gdy nie brakuje żadnych wymaganych uprawnień, ale użytkownik ma zabronione uprawnienia (posortowane i oddzielone przecinkami)
Dla danych wejściowych read,write,admin / read,write / delete wynikiem jest granted.
Dla danych wejściowych read / read,write / delete wynikiem jest missing: write.
Spróbuj swoich sił
let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))
// TODO: granted | missing: ... | forbidden: ...
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słówPoćwicz samodzielnie: Edytor online Swift