compactMap
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 28 / 56.
compactMap, opsiyonellerin filtrelendiği bir map işlemidir. Closure bir Optional döndürebilir; compactMap, nil sonuçları atar ve geri kalanları unwrap eder (çözer).
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [3, 7, 1]Int("hi"), "hi" içinden bir sayı ayrıştıramadığı için nil döndürür. compactMap bunları otomatik olarak dışarı atar ve size temiz bir [Int] verir.
O olmasaydı, strings.map { Int($0) } yazar ve içinde nil değerleri karışmış bir [Int?] elde ederdiniz, ardından bunları kendiniz filtrelemek zorunda kalırdınız. compactMap her iki adımı tek seferde yapar.
Görev
KolayTek bir giriş satırı okuyun: tam sayılar ve çöp metinlerin (bazı girdiler ayrıştırılamaz) virgülle ayrılmış bir karışımı.
Yazdırın:
- Tam sayılar (giriş sırasına göre),
,ile birleştirilmiş - Kaç girdinin atıldığı (ayrıştırılamayanlar)
- Ayrıştırılan tam sayıların toplamı
3,hi,7,!,1,42,oops girişi için çıktı şöyledir:
3,7,1,42
3
53Kopya kağıdı
compactMap, map gibi çalışır ancak nil sonuçlarını otomatik olarak kaldırır ve geri kalanları unwraps eder:
let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
// [3, 7, 1] — ayrıştırılamayan dizelerden gelen nil'ler atılırcompactMap olmadan, map içine nil'ler karışmış bir [Int?] döndürür ve ayrı bir filtreleme adımı gerektirirdi.
Kendin dene
let parts = readLine()!.components(separatedBy: ",")
// TODO: compactMap ile ints'e dönüştür; birleştirilmiş halini, atılan sayısını ve toplamı yazdır
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