Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

İki satır girdi okuyun:

  1. Virgülle ayrılmış tam sayılardan oluşan bir liste, nums
  2. Virgülle ayrılmış tam sayılardan oluşan bir liste, repeats (nums ile 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
quiz iconKendini test et

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