Menu
CoddyTech

El método reduce

Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 62 de 78.

reduce() combina todos los elementos de un arreglo en un valor: una suma, un producto, el elemento más grande, una oración.

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

Toma dos argumentos: una función y un valor inicial, aquí 0. La función recibe el resultado acumulado hasta el momento, llamado el acumulador (acc), y el siguiente elemento. Lo que devuelve se convierte en el nuevo acumulador:

  • acc comienza en 0
  • 0 + 1 es 1, 1 + 2 es 3, 3 + 3 es 6, 6 + 4 es 10
  • después del último elemento, reduce() devuelve el acumulador: 10

Para un producto, empieza en 1: numbers.reduce(func(acc, n): return acc * n, 1) es 24.

Sin un valor inicial, el primer elemento es el inicio y la función se ejecuta a partir del segundo elemento. Eso sirve para obtener el elemento más grande:

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

En un arreglo vacío sin un valor inicial, reduce() devuelve null, así que proporciona un valor inicial cuando el arreglo pueda estar vacío.

El acumulador puede ser de cualquier tipo. Con un valor inicial de "", esto construye una cadena a partir de las primeras letras:

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

Desafío

Fácil

El programa lee una línea de números enteros separados por comas y los almacena en el arreglo numbers. Esta parte ya está escrita.

Usando reduce() para cada uno de ellos, imprime tres líneas:

  1. la suma de los números
  2. su producto
  3. el número más grande (escribe la comparación en la expresión lambda; no llames a max())

Siempre hay al menos un número. Para la entrada 3,7,2,8,4, la salida es:

24
1344
8

Pruébalo tú mismo

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# Imprime la suma, el producto y el número mayor, cada uno con reduce()
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de GDScript online