Menu
CoddyTech

Die reduce-Methode

Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 62 von 78.

reduce() kombiniert alle Elemente eines Arrays zu einem Wert: einer Summe, einem Produkt, dem größten Element oder einem Satz.

var numbers = [1, 2, 3, 4]
var total = numbers.reduce(func(acc, n): return acc + n, 0)
print(total)
10

Es benötigt zwei Argumente: eine Funktion und einen Startwert, hier 0. Die Funktion erhält das bisherige Ergebnis, den sogenannten Akkumulator (acc), und das nächste Element. Ihr Rückgabewert wird zum neuen Akkumulator:

  • acc beginnt bei 0
  • 0 + 1 ist 1, 1 + 2 ist 3, 3 + 3 ist 6, 6 + 4 ist 10
  • nach dem letzten Element gibt reduce() den Akkumulator zurück: 10

Für ein Produkt beginnst du bei 1: numbers.reduce(func(acc, n): return acc * n, 1) ist 24.

Ohne einen Startwert ist das erste Element der Startwert, und die Funktion wird ab dem zweiten Element ausgeführt. Das eignet sich für das größte Element:

var biggest = [4, 9, 2].reduce(func(a, b): return a if a > b else b)
print(biggest) # 9

Bei einem leeren Array ohne Startwert gibt reduce() null zurück. Gib daher einen Startwert an, wenn das Array leer sein kann.

Der Akkumulator kann einen beliebigen Typ haben. Mit einem Startwert von "" wird daraus eine Zeichenkette aus den Anfangsbuchstaben erstellt:

var words = ["game", "over"]
print(words.reduce(func(acc, w): return acc + w[0], "")) # go
challenge icon

Aufgabe

Einfach

Das Programm liest eine Zeile mit durch Kommas getrennten ganzen Zahlen ein und speichert sie im Array numbers. Dieser Teil ist bereits geschrieben.

Gib mithilfe von reduce() für jede dieser Berechnungen eine Zeile aus:

  1. die Summe der Zahlen
  2. ihr Produkt
  3. die größte Zahl (schreibe den Vergleich in die Lambda-Funktion; rufe nicht max() auf)

Es gibt immer mindestens eine Zahl. Für die Eingabe 3,7,2,8,4 lautet die Ausgabe:

24
1344
8

Probier es selbst

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# Gib die Summe, das Produkt und die größte Zahl aus, jeweils mit 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 & Ablaufsteuerung

Übe selbstständig: Online-GDScript-Compiler