Reduce
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 25 / 56.
reduce tüm bir diziyi tek bir değere indirger. Bu yöntemle toplama, çarpma yapabilir, bir uç değeri bulabilir veya birçok öğeden yeni bir dize ya da dizi oluşturabilirsiniz.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10İlk argüman başlangıç akümülatörüdür. Closure, mevcut akümülatörü ve bir sonraki öğeyi alır ve yeni akümülatörü döndürür. Akümülatörün son değeri sonuçtur.
Aritmetik operatörler için Swift size sembol tabanlı kısayolu sunar:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce bir sayı döndürmek zorunda değildir. Biriktirici (accumulator) herhangi bir türde olabilir, siz karar verirsiniz:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"Görev
KolayTek bir satır girdi okuyun: virgülle ayrılmış tam sayılar listesi. Her biri için reduce kullanarak üç satır yazdırın:
- Toplam
- Çarpım
- Maksimum değer (iki argümandan büyük olanı döndüren bir closure kullanın,
.max()fonksiyonunu çağırmayın)
En az bir eleman olduğunu varsayın. Maksimum için, başlangıç akümülatörü olarak nums[0] kullanabilir ve dizinin geri kalanını reduce edebilirsiniz.
3,7,2,8,4 girdisi için çıktı şöyledir:
24
1344
8Kopya kağıdı
reduce, bir başlangıç biriktiricisi (accumulator) ve bir closure kullanarak bir diziyi tek bir değere indirger:
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10Aritmetik operatörler için kısa yazım:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24Biriktirici herhangi bir tipte olabilir:
["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"reduce kullanarak bir maksimum değer bulmak için, ilk elemanı başlangıç değeri olarak kullanın:
let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }Kendin dene
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// YAPILACAK: reduce kullanarak toplam, çarpım ve maksimum değerleri bul
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
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleri