Tembel map ve filter
Ara diziler oluşturmadan tembel dönüşümleri zincirleyin.
Tembel map ve filter, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Ara Diziler
Hemen çalışan zincirler her adım arasında yeni bir dizi için bellek ayırır. Büyük bir dizi üzerinde filter().map() kullanmak, yalnızca birkaç öğe isteyebileceğiniz hâlde iki eksiksiz dizi oluşturur.
Hemen Çalışan Bellek Ayırma
Burada iki ara dizi oluşturulur:
let nums = Array(1...6)
let result = nums
.filter { $0 % 2 == 0 } // builds [2, 4, 6]
.map { $0 * 10 } // builds [20, 40, 60]
print(result) // [20, 40, 60]Adımları Gecikmeli İşlemle Birleştirme
Gecikmeli zincir işlemleri birleştirir: sonraki öğe başlamadan önce her öğe tüm adımlardan geçer, bu nedenle hiçbir ara dizi için bellek ayrılmaz.
Gecikmeli Zincir
Aynı mantık, sıfır ara dizi:
let nums = Array(1...6)
let result = nums.lazy
.filter { $0 % 2 == 0 }
.map { $0 * 10 }
print(Array(result)) // [20, 40, 60]Öğe Öğe Akış
İzleme, aşama aşama yürütme yerine iç içe geçmiş yürütmeyi gösterir:
let out = [1, 2, 3].lazy
.filter { n -> Bool in print("filter \(n)"); return n > 1 }
.map { n -> Int in print("map \(n)"); return n }
print(Array(out)) // filter 1, filter 2, map 2, filter 3, map 3 -> [2, 3]Erken Çıkış İş Yükünü Azaltır
En kısa sürede durmak için gecikmeli zinciri first(where:) ile birleştirin:
let nums = Array(1...1_000_000)
let hit = nums.lazy.map { $0 + 1 }.first { $0 > 5 }
print(hit!) // 6 -- only a handful of elements processedprefix ile Gecikmeli İşlem
Pahalı bir dönüşümün yalnızca ilk birkaç sonucunu alın:
let squares = (1...).lazy.map { $0 * $0 }
print(Array(squares.prefix(5))) // [1, 4, 9, 16, 25]Atlanan İşi Sayma
Bir sayaç, kaç öğenin işlendiğini kanıtlar:
var transforms = 0
let result = Array(1...100).lazy
.map { (n: Int) -> Int in transforms += 1; return n * 2 }
.prefix(3)
_ = Array(result)
print(transforms) // 3, not 100Gecikmeli compactMap
compactMap'in de gecikmeli bir biçimi vardır:
let raw = ["1", "x", "3", "y", "5"]
let first = raw.lazy.compactMap { Int($0) }.first
print(first!) // 1Birçok Adımı Birleştirme
Uzun birleştirilmiş veri hatları somutlaştırılana kadar bellek ayırmadan kalır:
let r = Array(1...20).lazy
.filter { $0 % 2 == 0 }
.map { $0 * $0 }
.filter { $0 > 50 }
print(Array(r)) // [64, 100, 144, 196, 256, 324, 400]Birleştirmenin En Çok Yararlı Olduğu Durum
Gecikmeli birleştirme, kaynak büyük olduğunda ve sonucun yalnızca bir bölümünü tuttuğunuzda avantaj sağlar. Sonuçta her şeyi bir diziye dönüştürerek tüketiyorsanız tasarruf azalır ve hemen çalışan yaklaşım daha okunaklı olabilir.
let big = Array(1...10_000)
let sample = Array(big.lazy.filter { $0 % 1000 == 0 })
print(sample) // [1000, 2000, ... 10000]Hızlı Kontrol
Gecikmeli bir filter().map() zinciri, hemen çalışan zincirin oluşturduğu neyi önler?
Özet
Gecikmeli zincirleri öğrendiniz:
- Hemen çalışan zincirler her adım arasında bir dizi için bellek ayırır
.lazy, adımları birleştirir — öğe öğe çalışır ve ara sonuç oluşturmaz- Erken çıkış için
first(where:)veprefixile mükemmel uyum sağlar - En büyük avantaj: büyük kaynak, kısmi tüketim
Sırada gecikmeli ve hemen çalışan yaklaşımların karşılaştırılması var.
Sıkça Sorulan Sorular
“Tembel map ve filter” dersi ücretsiz mi?
Evet — “Tembel map ve filter” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Tembel map ve filter” dersinde ne öğreneceğim?
Ara diziler oluşturmadan tembel dönüşümleri zincirleyin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Tembel map ve filter” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- lazy Özelliği
- Tembel map ve filter
- Tembel ve Açgözlü İşlemlerin Dengesi
- Özel Tembel Diziler Oluşturma