Reduce
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 25 de 56.
reduce reduce un array completo a un único valor. Es la forma en que sumas, multiplicas, encuentras un extremo o construyes una nueva cadena o array a partir de muchos elementos.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10El primer argumento es el acumulador inicial. El closure recibe el acumulador actual y el siguiente elemento, y devuelve el nuevo acumulador. El valor final del acumulador es el resultado.
Para los operadores aritméticos, Swift te ofrece la abreviatura basada en símbolos:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce no tiene por qué devolver un número. El acumulador puede ser de cualquier tipo, tú decides:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"Desafío
FácilLee una sola línea de entrada: una lista de enteros separados por comas. Usando reduce para cada uno, imprime tres líneas:
- La suma
- El producto
- El valor máximo (usa un cierre que devuelva el mayor de los dos argumentos, no llames a
.max())
Asume al menos un elemento. Para el máximo, puedes usar nums[0] como el acumulador inicial y aplicar reduce al resto del arreglo.
Para la entrada 3,7,2,8,4, la salida es:
24
1344
8Hoja de referencia
reduce reduce un array a un solo valor utilizando un acumulador inicial y un cierre (closure):
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10Abreviatura para operadores aritméticos:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24El acumulador puede ser de cualquier tipo:
["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"Para encontrar un máximo usando reduce, utiliza el primer elemento como valor inicial:
let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }Pruébalo tú mismo
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: suma, producto, máximo mediante 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
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras