Menu
Coddy logo textTech

Filter

Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 24 / 56.

filter, bir yüklem (predicate) closure'ı alır ve yalnızca closure'ın true döndürdüğü öğeleri içeren yeni bir dizi döndürür.

let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)                 // [2, 4, 6]

Sonuç orijinal sırayı korur. Sonuç türü girdi türüyle eşleşir, herhangi bir dönüşüm gerçekleşmez, yalnızca bir seçim yapılır.

filter, map ile doğal bir şekilde zincirlenir:

let big = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }
print(big)                   // [9, 16, 25, 36]

Her bir zinciri, tıpkı bir boru hattı gibi yukarıdan aşağıya doğru okuyun. Her adım yeni bir dizi üretir; hiçbir şey orijinali değiştirmez.

challenge icon

Görev

Kolay

İki satırlık girdi okuyun:

  1. Virgülle ayrılmış tam sayı listesi
  2. Bir tam sayı min

Ayrı satırlarda şunları yazdırın:

  1. min değerinden kesinlikle büyük olan tam sayılar, , ile birleştirilmiş (hiçbiri uymuyorsa boş bırakın)
  2. Şartı sağlayan tam sayıların kareleri, , ile birleştirilmiş
  3. Şartı sağlayan tam sayıların sayısı

Bir zincir olarak filter + map kullanın. Girdi üzerinde iki kez yineleme yapmayın.

1. satırdaki 1,5,2,8,3,7 ve 2. satırdaki 4 girdisi için çıktı şöyledir:

5,8,7
25,64,49
3

Kopya kağıdı

Bir koşulla eşleşen öğeleri seçmek için filter kullanın:

let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]

filtermap ile bir işlem hattı (pipeline) olarak zincirleyin:

let result = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }  // [9, 16, 25, 36]

Her adım yeni bir dizi döndürür; orijinal olan değişmez. Sıralama korunur.

Kendin dene

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!

// YAPILACAK: bir kez > min filtrele, sonra karelerle eşleştir; her ikisini de yazdır, sonra say
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