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) // 10Das 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, *) // 24reduce 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!"Aufgabe
EinfachLies eine einzelne Eingabezeile: eine durch Kommas getrennte Liste von Ganzzahlen. Verwende für jedes reduce und gib drei Zeilen aus:
- Die Summe
- Das Produkt
- 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
8Spickzettel
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 } // 10Kurzschreibweise für arithmetische Operatoren:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24Der 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken