Menu
Coddy logo textTech

Reduce / Inject

Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 23 von 56.

Manchmal müssen Sie ein gesamtes Array auf einen einzelnen Wert reduzieren, eine Summe, ein Produkt, einen längsten String. reduce (auch inject genannt: dieselbe Methode, zwei Namen) ist das Werkzeug dafür.

Der Block nimmt zwei Parameter entgegen: den Akkumulator und das aktuelle Element. Der Rückgabewert des Blocks wird zum nächsten Akkumulator.

total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts total   # 10

Schritt für Schritt ist der Akkumulator 0 → 1 → 3 → 6 → 10.

Das erste Argument ist der Startwert des Akkumulators. Wenn Sie es weglassen, verwendet Ruby das erste Element des Arrays:

[1, 2, 3, 4].reduce { |acc, n| acc * n }   # 24

Für reine Operationen wie Summe und Produkt bietet Ruby eine Abkürzung: Übergeben Sie ein Symbol anstelle eines Blocks:

[1, 2, 3, 4].reduce(:+)   # 10
[1, 2, 3, 4].reduce(:*)   # 24

Sobald Sie einen benutzerdefinierten Akkumulator erstellen können, können Sie fast alles in einem Durchgang berechnen.

challenge icon

Aufgabe

Einfach

Lies eine durch Kommas getrennte Liste von Ganzzahlen ein. Gib drei Zeilen aus:

  1. Die Summe (verwende reduce(:+))
  2. Das Produkt (verwende reduce(:*))
  3. Das Maximum, berechnet mit reduce und einem expliziten Block, nicht unter Verwendung von max.

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

18
240
8

Spickzettel

reduce (Alias: inject) reduziert ein Array auf einen einzelnen Wert. Der Block erhält einen Akkumulator und das aktuelle Element; sein Rückgabewert wird zum nächsten Akkumulator.

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

Lassen Sie den Startwert weg, um das erste Element als initialen Akkumulator zu verwenden:

[1, 2, 3, 4].reduce { |acc, n| acc * n }  # 24

Übergeben Sie ein Symbol als Abkürzung für einfache Operationen:

[1, 2, 3, 4].reduce(:+)  # 10
[1, 2, 3, 4].reduce(:*)  # 24

Probier es selbst

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: Summe, Produkt und Maximum ausgeben (mit reduce + explizitem Block)
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 & Programmfluss