reduce und reduce(into:)
Aggregieren Sie Collections zu einem einzelnen Wert.
reduce und reduce(into:) ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist reduce?
reduce reduziert eine ganze Sequenz auf einen einzigen Wert, indem es einen Akkumulator wiederholt mit jedem Element kombiniert.
- Sie geben einen Startwert an
- Und eine Closure
(accumulator, element) -> accumulator
Summieren mit reduce
Das klassische Beispiel – alles addieren:
let nums = [1, 2, 3, 4]
let total = nums.reduce(0) { acc, x in acc + x }
print(total) // 10Kurzschreibweise mit Operatoren
Wenn die Closure nur aus einem Operator besteht, können Sie die Operatorfunktion direkt übergeben:
let nums = [1, 2, 3, 4]
print(nums.reduce(0, +)) // 10
print(nums.reduce(1, *)) // 24Auf einen anderen Typ reduzieren
Der Ergebnistyp kann sich vom Elementtyp unterscheiden:
let words = ["a", "b", "c"]
let joined = words.reduce("") { $0 + $1.uppercased() }
print(joined) // "ABC"Mit reduce ein Maximum finden
Sie können auch andere Aggregationen als Summen berechnen:
let nums = [3, 9, 2, 7]
let maxVal = nums.reduce(Int.min) { max($0, $1) }
print(maxVal) // 9Die Kosten von reduce
Plain reduce erzeugt in jedem Schritt einen völlig neuen Akkumulator. Bei Werttypen wie String oder Array bedeutet das, dass der gesamte Akkumulator für jedes Element kopiert wird – bei großen Eingaben entsteht ein Aufwand von O(n²).
reduce(into:) kommt ins Spiel
reduce(into:) übergibt den Akkumulator als inout-Parameter, sodass Sie ihn direkt verändern, statt ihn zu kopieren:
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]Ein Array effizient erstellen
reduce(into:) spielt seine Stärken aus, wenn Sie Werte in einer Collection sammeln:
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]reduce und reduce(into:)
Gleiches Ergebnis, unterschiedliche Performance-Eigenschaften:
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 abcMit reduce(into:) gruppieren
Ein häufig verwendetes Muster: Elemente nach einem Schlüssel in Gruppen einteilen:
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"]Zwischen ihnen wählen
Verwenden Sie reduce für kostengünstige skalare Akkumulatoren (Int, Double). Verwenden Sie reduce(into:), sobald der Akkumulator eine Collection oder ein anderer großer Werttyp ist, um Kopien zu vermeiden.
let nums = [1, 2, 3]
print(nums.reduce(0, +)) // scalar: plain reduce
print(nums.reduce(into: Set<Int>()) { $0.insert($1) }) // collection: intoKurztest
Warum sollten Sie reduce(into:) bevorzugen, wenn Sie ein Dictionary oder Array erstellen?
Zusammenfassung
Sie haben Reduktion kennengelernt:
reduce(initial) { acc, x in ... }reduziert eine Sequenz auf einen einzigen Wert- Kurzschreibweise mit einem Operator:
reduce(0, +) reduce(into:)verändert eineninout-Akkumulator – verwenden Sie es für Collections- Ideal für Zählungen, Gruppierungen und das Zusammenfügen von Werten
Als Nächstes: flatMap und Verkettungen.
Häufig gestellte Fragen
Ist die Lektion „reduce und reduce(into:)“ kostenlos?
Ja — der vollständige Text von „reduce und reduce(into:)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „reduce und reduce(into:)“?
Aggregieren Sie Collections zu einem einzelnen Wert. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „reduce und reduce(into:)“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- map und compactMap
- filter und Prädikate
- reduce und reduce(into:)
- flatMap und Verkettung