Saltar al contenido

Colecciones: Array, Dictionary y Set

Las tres estructuras de datos que usarás a diario, cómo recorrerlas con bucles y rangos, y las operaciones que las hacen potentes.

Casi todo en una app es una colección de cosas: una lista de tareas, un mapa de ajustes, un conjunto de etiquetas. Swift te da tres estructuras para ello, todas con seguridad de tipos: sabes exactamente qué contienen.

  • Arrays: listas ordenadas.
  • Dictionaries: pares clave-valor.
  • Sets: conjuntos sin duplicados.
  • Recorrerlas con bucles y rangos.

Array: listas ordenadas

Una secuencia ordenada de elementos del mismo tipo:

SWIFT
var frutas = ["manzana", "pera", "uva"]   // [String]frutas.append("kiwi")                      // añadir al finalfrutas.insert("mango", at: 0)              // insertar en una posiciónlet primera = frutas[0]                     // acceder por índicefrutas.remove(at: 1)                        // quitarprint(frutas.count)                         // cuántos hayprint(frutas.isEmpty)                       // ¿está vacío?print(frutas.contains("uva"))               // ¿contiene X?

Cuidado con los índices

Acceder a frutas[10] cuando solo hay 4 elementos crashea. Para acceso seguro, comprueba antes (indices.contains) o usa first/last, que devuelven opcionales:

SWIFT
let primera = frutas.first    // String? (nil si está vacío)

Dictionary: clave → valor

Asocia claves únicas con valores. Ideal para buscar por identificador:

SWIFT
var edades = ["Ana": 30, "Luis": 25]   // [String: Int]edades["Marta"] = 28                    // añadir o actualizarlet edadAna = edades["Ana"]             // Int? (opcional: la clave podría no existir)edades["Luis"] = nil                    // eliminarprint(edades.count)

Fíjate: acceder por clave devuelve un opcional, porque esa clave podría no estar. Ahí vuelven a aparecer los opcionales de la lección anterior.

Set: sin duplicados

Un conjunto no ordenado de elementos únicos. Perfecto cuando no quieres repetidos y necesitas comprobar pertenencia rápido:

SWIFT
var etiquetas: Set<String> = ["swift", "ios", "swift"]print(etiquetas.count)          // 2 — el duplicado se ignoraetiquetas.insert("swiftui")print(etiquetas.contains("ios")) // true// operaciones de conjuntoslet a: Set = [1, 2, 3]let b: Set = [3, 4, 5]print(a.intersection(b))        // {3}print(a.union(b))               // {1,2,3,4,5}

Recorrer con bucles

El bucle for-in recorre cualquier colección:

SWIFT
for fruta in frutas {    print(fruta)}// diccionario: clave y valorfor (nombre, edad) in edades {    print("\(nombre) tiene \(edad) años")}// con el índice, si lo necesitasfor (i, fruta) in frutas.enumerated() {    print("\(i): \(fruta)")}

Rangos

Genera secuencias de números con ... (incluye el final) o ..< (lo excluye):

SWIFT
for i in 1...5 { print(i) }      // 1, 2, 3, 4, 5for i in 0..<frutas.count { }    // 0 hasta count-1while contador < 10 { contador += 1 }   // while también existe

Piensa en colecciones, no en índices

Un reflejo de Swift maduro: en vez de bucles con índices manuales (for i in 0..<array.count), recorre directamente los elementos (for x in array) o usa operaciones de alto nivel (map, filter, reduce — próxima lección). El código queda más claro, más seguro (adiós errores de índice) y más cercano a lo que quieres expresar. Los índices son la excepción, no la norma.

Maneja datos de verdad

  1. Crea un array de tus lenguajes favoritos y añade uno con append.
  2. Crea un diccionario de nombre: edad y accede a una edad (fíjate que es opcional).
  3. Crea un Set con duplicados y comprueba que se ignoran.
  4. Recorre el diccionario imprimiendo “X tiene Y años”.
  5. Usa un rango 1...10 para imprimir los números en un bucle.