Menu
Coddy logo textTech

Özel Yüksek Seviyeli Fonksiyonlar

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

Artık kendi yüksek mertebeli fonksiyonlarınızı yazabilirsiniz ve bunlar map ile filter'ın yanına tam olarak uyum sağlayacaktır. Kalıp her zaman aynıdır: bir closure parametresi alın, döngü içinde onu çağırın, sonucu döndürün.

extension Array {
    func myMap<T>(_ transform: (Element) -> T) -> [T] {
        var result: [T] = []
        for item in self {
            result.append(transform(item))
        }
        return result
    }
}

[1, 2, 3].myMap { $0 * 10 }       // [10, 20, 30]

Uzantılar gözünde büyüyorsa bunun yerine serbest bir işlev yaz; fikir aynıdır:

func count<T>(_ items: [T], where predicate: (T) -> Bool) -> Int {
    var n = 0
    for item in items where predicate(item) {
        n += 1
    }
    return n
}

Closure'ları bir yerlere aktarabildiğinizde, standart kütüphane sihir gibi görünmeyi bırakır ve kendi başınıza yazabileceğiniz bir dizi desen gibi görünmeye başlar.

challenge icon

Görev

Orta

Diziyi bir kez dolaşan ve bir demet partition(_ items: [Int], by predicate: (Int) -> Bool) -> ([Int], [Int]) döndüren bir serbest fonksiyon (matched, rest) yazın: koşulu sağlayan öğeler ve geri kalanlar, her ikisi de özgün sıralarında.

İki satır okuyun: bir tamsayı min, ardından virgülle ayrılmış bir tamsayı listesi. partition koşulunu denetleyen bir yüklemle n > min işlevinizi kullanın. Şunları yazdırın:

  1. matched: <...>
  2. rest: <...>

Her listeyi , ile birleştirin (yazdırılacak hiçbir şey yoksa boş bırakın).

5 / 2,7,3,8,5 girdisi için çıktı şöyledir:

matched: 7,8
rest: 2,3,5

Kendin dene

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

// YAPILACAK: partition(_:by:) -> ([Int], [Int]); eşleşenleri ve geri kalanları 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

Kendi başına pratik yap: Swift playground