Alt Küme ve Üst Küme
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 21 / 56.
Kümeleri birleştirmenin ötesinde, onları karşılaştırabilirsiniz de.
isSubset(of:), "benim her bir elemanım diğer kümede de var mı?" sorusunu yanıtlar.
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true
big.isSubset(of: small) // falseisSuperset(of:) bunun tersidir, "diğer kümenin her elemanını içeriyor muyum?":
big.isSuperset(of: small) // trueisDisjoint(with:), iki kümenin hiçbir ortak elemanı olmadığında true değerini döndürür:
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // trueBu üç yüklem, manuel bir döngü yazmadan "gerekli izinler" veya "hepsi" / "hiçbiri" kurallarını ifade etmenin en temiz yoludur.
Görev
OrtaBir belge için erişim kontrolü yapıyorsunuz. Üç satır okuyun:
- Kullanıcının izinleri (virgülle ayrılmış)
- Gerekli izinler (virgülle ayrılmış)
- Yasaklı izinler (virgülle ayrılmış)
Kullanıcıya şu durumlarda erişim izni verilir:
- İzinleri, gerekli izinlerin bir üst kümesi (superset) olduğunda (her bir gerekli izne sahip olunduğunda)
- İzinleri, yasaklı izinlerle ayrık (disjoint) olduğunda
Tam olarak şunlardan birini yazdırın:
granted- Gerekli izinler eksik olduğunda
missing: <...>(sıralı, virgülle ayrılmış). Yasaklı izinlere sahip olunsa bile bunu yazdırın. - Hiçbir gerekli izin eksik değilse ancak yasaklı izinlere sahip olunmuşsa
forbidden: <...>(sıralı, virgülle ayrılmış)
read,write,admin / read,write / delete girişi için çıktı granted olur.
read / read,write / delete girişi için çıktı missing: write olur.
Kopya kağıdı
Swift'te küme karşılaştırma yöntemleri:
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true – small'ın her elemanı big içindedir
big.isSuperset(of: small) // true – big, small'ın her elemanını içerir
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true – ortak eleman yokKendin dene
let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))
// TODO: sağlanan | eksik: ... | yasaklı: ...
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleri