Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Tek 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:

  1. Tam sayılar (giriş sırasına göre), , ile birleştirilmiş
  2. Kaç girdinin atıldığı (ayrıştırılamayanlar)
  3. 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
53

Kopya 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ır

compactMap 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
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