Özel Tembel Diziler Oluşturma
Kendi tembel değerlendirilen dizilerinizi oluşturun.
Özel Tembel Diziler Oluşturma, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. 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.
Neden Özel Tembel Diziler?
map ve filter ötesinde, sonsuz üreticiler veya isteğe bağlı çalışması gereken maliyetli hesaplanmış akışlar gibi amaçlar için kendi tembel değerlendirilen dizilerinizi oluşturabilirsiniz.
LazySequence Türü
.lazy çağrısı, bir koleksiyonu LazySequenceProtocol ile uyumlu bir türle sarar. Eklediğiniz işlemler daha fazla tembel sarmalayıcı döndürür:
let view = [1, 2, 3].lazy
let mapped = view.map { $0 * 2 }
print(Array(mapped)) // [2, 4, 6] -- LazyMapSequenceÇekme Tabanlı Dizi
Özel diziler çekme tabanlıdır: yineleyiciye yapılan her çağrı, yalnızca istendiğinde bir sonraki değeri hesaplar. İşte bir Fibonacci üreticisi:
struct Fibonacci: Sequence, IteratorProtocol {
var a = 0, b = 1
mutating func next() -> Int? {
let r = a
(a, b) = (b, a + b)
return r
}
}
print(Array(Fibonacci().prefix(6))) // [0, 1, 1, 2, 3, 5]Sonsuz ve Tembel Tüketim
Değerler isteğe bağlı olarak çekildiğinden, sonlu bir dilim aldığınız sürece sonsuz bir dizi güvenlidir:
struct Naturals: Sequence, IteratorProtocol {
var n = 1
mutating func next() -> Int? { defer { n += 1 }; return n }
}
print(Array(Naturals().prefix(4))) // [1, 2, 3, 4]LazySequenceProtocol ile Uyum Sağlama
LazySequenceProtocol kullanmak, kendi türünüzün map/filter ile de tembel zincirler oluşturmasını sağlar:
struct Counter: Sequence, IteratorProtocol, LazySequenceProtocol {
var n = 0; let limit: Int
mutating func next() -> Int? {
guard n < limit else { return nil }
defer { n += 1 }
return n
}
}
print(Array(Counter(n: 0, limit: 3).map { $0 * 10 })) // [0, 10, 20]sequence(first:next:)
Standart kitaplık, yeni bir tür oluşturmadan özel tembel diziler için bir oluşturucu sunar:
let powers = sequence(first: 1) { $0 <= 16 ? $0 * 2 : nil }
print(Array(powers)) // [1, 2, 4, 8, 16, 32]sequence(state:next:)
Adımlar arasında daha kapsamlı bir durum taşıyın:
let fibs = sequence(state: (0, 1)) { (s: inout (Int, Int)) -> Int? in
let r = s.0
s = (s.1, s.0 + s.1)
return r
}
print(Array(fibs.prefix(6))) // [0, 1, 1, 2, 3, 5]AnySequence Sarmalayıcısı
Bir API sunarken somut türü AnySequence arkasında gizleyin:
func evens(upTo n: Int) -> AnySequence<Int> {
AnySequence((0...n).lazy.filter { $0 % 2 == 0 })
}
print(Array(evens(upTo: 8))) // [0, 2, 4, 6, 8]Tembel Hesaplanan Akış
Maliyetli işi her öğe gerçekten tüketilene kadar erteleyin:
let stream = (1...5).lazy.map { (n: Int) -> Int in
print("computing \(n)")
return n * n
}
print(stream.first!) // computing 1, then 1Üreticiyi Durdurma
Diziyi düzgün biçimde sonlandırmak için next() içinden nil döndürün:
let countdown = sequence(state: 3) { (s: inout Int) -> Int? in
guard s > 0 else { return nil }
defer { s -= 1 }
return s
}
print(Array(countdown)) // [3, 2, 1]Hepsini Birleştirme
İsteğe bağlı bir işlem hattı oluşturmak için özel bir üreticiyi tembel işleçlerle birleştirin:
let primesIsh = sequence(first: 2) { $0 < 20 ? $0 + 1 : nil }
.lazy
.filter { n in (2..<n).allSatisfy { n % $0 != 0 } }
print(Array(primesIsh)) // [2, 3, 5, 7, 11, 13, 17, 19]Hızlı Kontrol
Özel bir IteratorProtocol dizisinin sonunu ne belirtir?
Özet
Özel tembel dizileri öğrendiniz:
.lazy,LazySequenceProtocolsarmalayıcıları üretirSequence+IteratorProtocoluygulayın; durmak içinnext()içindennildöndürün- Hızlı oluşturucular olarak
sequence(first:next:)/sequence(state:next:)kullanın - Somut türleri gizlemek için
AnySequenceile sarın
Kurs tamamlandı! Sırada: closures konusuna derinlemesine bakış var.
Yapay zeka eğitmeniyle Swift öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 122
- Dersler
- 409
Sıkça Sorulan Sorular
“Özel Tembel Diziler Oluşturma” dersi ücretsiz mi?
Evet — “Özel Tembel Diziler Oluşturma” 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.
“Özel Tembel Diziler Oluşturma” dersinde ne öğreneceğim?
Kendi tembel değerlendirilen dizilerinizi oluşturun. 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 4. dersidir.
“Özel Tembel Diziler Oluşturma” 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