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)10Toma 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:
acccomienza en00 + 1es1,1 + 2es3,3 + 3es6,6 + 4es10- 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) # 9En 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], "")) # goDesafío
FácilEl 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:
- la suma de los números
- su producto
- 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
8Prué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()
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
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante11Funciones de orden superior
El método mapEl método filterEl método reduceany y allRepaso - Validador de correo electrónicoRepaso - Procesador de números3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online