reduce ve reduce(into:)
Koleksiyonları tek bir değerde toplayın.
reduce ve reduce(into:), CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. 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.
İndirgeme Nedir?
reduce, bir biriktiriciyi her öğeyle tekrar tekrar birleştirerek bir dizinin tamamını tek bir değere indirger.
- Bir başlangıç değeri verirsiniz
- Ayrıca
(accumulator, element) -> accumulatorbiçiminde bir kapanış verirsiniz
İndirgeyerek Toplama
Klasik örnek — her şeyi toplayın:
let nums = [1, 2, 3, 4]
let total = nums.reduce(0) { acc, x in acc + x }
print(total) // 10İşleç Kısaltması
Kapanış yalnızca bir işleçten oluşuyorsa işleç işlevini doğrudan geçirebilirsiniz:
let nums = [1, 2, 3, 4]
print(nums.reduce(0, +)) // 10
print(nums.reduce(1, *)) // 24Farklı Bir Türe İndirgeme
Sonuç türü, öğe türünden farklı olabilir:
let words = ["a", "b", "c"]
let joined = words.reduce("") { $0 + $1.uppercased() }
print(joined) // "ABC"İndirgeyerek En Büyük Değeri Bulma
Toplamların ötesinde başka toplu değerler de hesaplayabilirsiniz:
let nums = [3, 9, 2, 7]
let maxVal = nums.reduce(Int.min) { max($0, $1) }
print(maxVal) // 9İndirgemenin Maliyeti
Standart reduce, her adımda yepyeni bir biriktirici oluşturur. String veya Array gibi değer türlerinde bu, her öğede biriktiricinin tamamının kopyalanması anlamına gelir — büyük girdiler için O(n²) işlem.
Yerinde İndirgemenin Kullanımı
reduce(into:), biriktiriciyi inout parametresi olarak geçirir; böylece kopyalamak yerine onu yerinde değiştirirsiniz:
let nums = [1, 2, 2, 3, 3, 3]
let counts = nums.reduce(into: [Int: Int]()) { dict, n in
dict[n, default: 0] += 1
}
print(counts) // [1: 1, 2: 2, 3: 3]Diziyi Verimli Şekilde Oluşturma
Bir koleksiyonda biriktirme sırasında yerinde indirgeme özellikle kullanışlıdır:
let nums = [1, 2, 3, 4, 5]
let evensSquared = nums.reduce(into: [Int]()) { result, n in
if n % 2 == 0 { result.append(n * n) }
}
print(evensSquared) // [4, 16]İndirgeme ve Yerinde İndirgeme
Sonuç aynı, performans özellikleri farklıdır:
let parts = ["a", "b", "c"]
let a = parts.reduce("") { $0 + $1 } // copies each step
let b = parts.reduce(into: "") { $0 += $1 } // mutates in place
print(a, b) // abc abcYerinde İndirge ile Gruplama
Sık kullanılan bir kalıp: öğeleri bir anahtara göre gruplara ayırmak:
let names = ["Ann", "Al", "Bo", "Cy"]
let byInitial = names.reduce(into: [Character: [String]]()) { dict, name in
dict[name.first!, default: []].append(name)
}
print(byInitial[Character("A")]!) // ["Ann", "Al"]İkisi Arasında Seçim
Ucuz skaler biriktiriciler (tamsayılar ve ondalık sayılar) için reduce kullanın. Biriktirici bir koleksiyon veya başka bir büyük değer türüyse kopyaları önlemek için reduce(into:) kullanın.
let nums = [1, 2, 3]
print(nums.reduce(0, +)) // scalar: plain reduce
print(nums.reduce(into: Set<Int>()) { $0.insert($1) }) // collection: intoHızlı Kontrol
Bir sözlük veya dizi oluştururken neden reduce(into:) tercih edilmelidir?
Özet
İndirgemenin temellerini öğrendiniz:
reduce(initial) { acc, x in ... }, bir diziyi tek bir değere indirger- İşleç kısaltması:
reduce(0, +) reduce(into:), birinoutbiriktiriciyi değiştirir — koleksiyonlar için kullanın- Sayımlar, gruplama ve birleştirme için idealdir
Sırada flatMap ve zincirleme var.
Sıkça Sorulan Sorular
“reduce ve reduce(into:)” dersi ücretsiz mi?
Evet — “reduce ve reduce(into:)” 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.
“reduce ve reduce(into:)” dersinde ne öğreneceğim?
Koleksiyonları tek bir değerde toplayın. 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 3. dersidir.
“reduce ve reduce(into:)” 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
- map ve compactMap
- filter ve Koşul Belirteçleri
- reduce ve reduce(into:)
- flatMap ve Zincirleme