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.
Kopya kağıdı
flatMap her bir öğeyi bir diziyle eşler ve tüm sonuçları tek bir düz dizi halinde birleştirir:
let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]map fonksiyonunun aksine (ki bu [[Int]] üretirdi), flatMap tek bir adımda düzleştirme yapar. Ayrıca iç içe geçmiş dizileri doğrudan düzleştirebilir:
let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]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