0Pricing
Swift Academy · Lección

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)  // 10

Notació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, *))   // 24

Reducir 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)  // 9

El 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 abc

Agrupar 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: into

Comprobació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 acumulador inout; ú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

  1. map y compactMap
  2. filter y predicados
  3. reduce y reduce(into:)
  4. flatMap y encadenamiento
← Volver a Swift Academy