reduce y reduce(into:)
Agregue colecciones en un único valor.
reduce y reduce(into:) es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué es reduce?
reduce convierte una secuencia completa en un único valor al combinar repetidamente un acumulador con cada elemento.
- Debe proporcionar un valor inicial
- Y un closure
(accumulator, element) -> accumulator
Sumar con reduce
El ejemplo clásico: sumarlo todo:
let nums = [1, 2, 3, 4]
let total = nums.reduce(0) { acc, x in acc + x }
print(total) // 10Notación abreviada de operadores
Cuando el closure consiste simplemente en un operador, puede pasar directamente la función del operador:
let nums = [1, 2, 3, 4]
print(nums.reduce(0, +)) // 10
print(nums.reduce(1, *)) // 24Reducir a un tipo diferente
El tipo de resultado puede ser diferente del tipo de elemento:
let words = ["a", "b", "c"]
let joined = words.reduce("") { $0 + $1.uppercased() }
print(joined) // "ABC"Encontrar el máximo con reduce
Puede calcular agregados además de sumas:
let nums = [3, 9, 2, 7]
let maxVal = nums.reduce(Int.min) { max($0, $1) }
print(maxVal) // 9El coste de reduce
El reduce normal crea un acumulador completamente nuevo en cada paso. Para tipos por valor como String o Array, esto implica copiar todo el acumulador en cada elemento: un trabajo O(n²) para entradas grandes.
Aparece reduce(into:)
reduce(into:) pasa el acumulador como parámetro inout, por lo que puede modificarlo en el mismo lugar en vez de copiarlo:
let nums = [1, 2, 2, 3, 3, 3]
let counts = nums.reduce(into: [Int: Int]()) { dict, n in
dict[n, default: 0] += 1
}
print(counts) // [1: 1, 2: 2, 3: 3]Crear un array de forma eficiente
reduce(into:) resulta especialmente útil al acumular elementos en una colección:
let nums = [1, 2, 3, 4, 5]
let evensSquared = nums.reduce(into: [Int]()) { result, n in
if n % 2 == 0 { result.append(n * n) }
}
print(evensSquared) // [4, 16]reduce frente a reduce(into:)
El mismo resultado, pero con características de rendimiento diferentes:
let parts = ["a", "b", "c"]
let a = parts.reduce("") { $0 + $1 } // copies each step
let b = parts.reduce(into: "") { $0 += $1 } // mutates in place
print(a, b) // abc abcAgrupar con reduce(into:)
Un patrón frecuente: agrupar elementos por una clave:
let names = ["Ann", "Al", "Bo", "Cy"]
let byInitial = names.reduce(into: [Character: [String]]()) { dict, name in
dict[name.first!, default: []].append(name)
}
print(byInitial[Character("A")]!) // ["Ann", "Al"]Elegir entre ambas opciones
Use reduce para acumuladores escalares baratos (Int, Double). Use reduce(into:) siempre que el acumulador sea una colección u otro tipo por valor grande, para evitar copias.
let nums = [1, 2, 3]
print(nums.reduce(0, +)) // scalar: plain reduce
print(nums.reduce(into: Set<Int>()) { $0.insert($1) }) // collection: intoComprobación rápida
¿Por qué conviene preferir reduce(into:) al crear un diccionario o un array?
Repaso
Ha aprendido a reducir:
reduce(initial) { acc, x in ... }convierte una secuencia en un único valor- Notación abreviada de operadores:
reduce(0, +) reduce(into:)modifica un acumuladorinout; úselo para colecciones- Es ideal para recuentos, agrupaciones y concatenaciones
A continuación: flatMap y encadenamiento.
Preguntas frecuentes
¿La lección «reduce y reduce(into:)» es gratis?
Sí — el texto completo de «reduce y reduce(into:)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «reduce y reduce(into:)»?
Agregue colecciones en un único valor. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «reduce y reduce(into:)»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- map y compactMap
- filter y predicados
- reduce y reduce(into:)
- flatMap y encadenamiento