flatMap
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 29 / 56.
flatMap, her bir öğenin birden fazla sonuç ürettiği durumlar içindir. Closure bir dizi döndürür; flatMap bunların hepsini tek bir düz dizi halinde birleştirir.
let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]Closure içinde de gerçek işler yapabilirsiniz. Her bir değeri küçük bir diziyle eşlemek ve sonucu tek bir adımda düzleştirmek tipik kullanım durumudur:
let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]map ile karşılaştırın: bu, düzleştirmek için başka bir adıma ihtiyaç duyacağınız küçük dizilerden oluşan bir dizi olan [[Int]] üretecekti. flatMap bu iki adımı tek bir adımda birleştirir.
Görev
Kolayİki satır girdi okuyun:
- Virgülle ayrılmış tam sayılardan oluşan bir liste,
nums - Virgülle ayrılmış tam sayılardan oluşan bir liste,
repeats(numsile aynı uzunlukta)
Her bir i için, nums[i] değerini tam olarak repeats[i] kez tekrarlayın. Sonuçta oluşan düz diziyi , ile birleştirerek yazdırın. flatMap kullanın.
1. satırdaki 5,7,2 girdisi ve 2. satırdaki 3,1,2 girdisi için çıktı 5,5,5,7,2,2 olur.
Kendin dene
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }
// YAPILACAK: her bir (num, repeat) ikilisini Array(repeating:count:) içine flatMap ile yayın; "," ile birleştirin
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