Menu
Coddy logo textTech

Reduce

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 25 von 56.

reduce reduziert ein gesamtes Array auf einen einzigen Wert. So summieren, multiplizieren Sie, finden einen Extremwert oder erstellen einen neuen String oder ein neues Array aus vielen Elementen.

let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total)                       // 10

Das erste Argument ist der initiale Akkumulator. Der Closure erhält den aktuellen Akkumulator und das nächste Element und gibt den neuen Akkumulator zurück. Der Endwert des Akkumulators ist das Ergebnis.

Für arithmetische Operatoren bietet Swift Ihnen die symbolbasierte Kurzschreibweise:

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

reduce muss keine Zahl zurückgeben. Der Akkumulator kann von beliebigem Typ sein, Sie entscheiden:

let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence)                    // "hi!there!"
challenge icon

Aufgabe

Einfach

Lies eine einzelne Eingabezeile: eine durch Kommas getrennte Liste von Ganzzahlen. Verwende für jedes reduce und gib drei Zeilen aus:

  1. Die Summe
  2. Das Produkt
  3. Der Maximalwert (verwende einen Closure, der das größere der beiden Argumente zurückgibt, rufe nicht .max() auf)

Gehe von mindestens einem Element aus. Für das Maximum kannst du nums[0] als initialen Akkumulator verwenden und den Rest des Arrays reduzieren.

Für die Eingabe 3,7,2,8,4 ist die Ausgabe:

24
1344
8

Spickzettel

reduce reduziert ein Array auf einen einzelnen Wert unter Verwendung eines initialen Akkumulators und eines Closures:

let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10

Kurzschreibweise für arithmetische Operatoren:

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

Der Akkumulator kann von beliebigem Typ sein:

["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"

Um ein Maximum mit reduce zu finden, verwenden Sie das erste Element als Initialwert:

let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }

Probier es selbst

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: Summe, Produkt, Maximum via reduce
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss