Değerleri Gruplandırma
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 16 / 56.
Varsayılan alt simge deseni, iki günlük şeklin temelini oluşturur.
Frekans sayacı: her bir anahtarın kaç kez göründüğünü sayın.
let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]Bucketing: değerleri türetilmiş bir anahtar altında toplayın:
let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]Gruplama (bucketing) durumu için varsayılan değer boş bir dizidir. default: değeri yalnızca anahtar eksik olduğunda kullanılır, ardından sağ taraf girişi yerinde değiştirir.
Görev
OrtaTek bir giriş satırı okuyun: virgülle ayrılmış bir kelime listesi.
Şu sırayla yazdırın:
- Girişte görünen her kelime uzunluğu için, en kısadan en uzuna doğru sıralanmış,
<length>: <count>biçiminde bir satır; buradacountbu uzunluktaki kaç kelimenin göründüğüdür Most common length: <n>; buradanen yüksek sayıya sahip uzunluktur. Eşitlik durumunda daha kısa olan uzunluğu seçin.
hi,hello,yo,hey,bonjour,bye girişi için çıktı şöyledir:
2: 2
3: 2
5: 1
7: 1
Most common length: 2(2 ve 3 uzunluklarının her ikisi de iki kez görünür. Eşitlik daha kısa olanla bozulur, bu nedenle 2 kazanır.)
Kopya kağıdı
Frekans sayacı – default: 0 kullanarak her bir anahtarın oluşum sayısını sayın:
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}Gruplandırma – default: [] kullanarak değerleri türetilmiş bir anahtar altında gruplandırın:
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}default: değeri yalnızca anahtar eksik olduğunda kullanılır; sonuç daha sonra olduğu yerde değiştirilir.
Kendin dene
let words = readLine()!.components(separatedBy: ",")
// TODO: kelimeleri uzunluklarına göre say; sıralı yazdır; en yaygın olanı yazdır (eşitlikte: daha kısa olanı)
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 İstatistikleri3Sözlükler
Sözlük Tanımlamaİsteğe Bağlı AramaSözlükleri GüncellemeSözlükleri YinelemeDeğerleri GruplandırmaÖzet - Envanter6Yüksek Seviyeli Fonksiyonlar Pt. 2
compactMapflatMapsorted(by:)İşlem Hatları OluşturmaÖzet - Liderlik Tablosu