Menu
Coddy logo textTech

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, *)              // 24

reduce 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!"
challenge icon

Görev

Kolay

Tek bir satır girdi okuyun: virgülle ayrılmış tam sayılar listesi. Her biri için reduce kullanarak üç satır yazdırın:

  1. Toplam
  2. Çarpım
  3. 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
8

Kopya 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 } // 10

Aritmetik operatörler için kısa yazım:

[1, 2, 3, 4].reduce(0, +)  // 10
[1, 2, 3, 4].reduce(1, *)  // 24

Biriktirici 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
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