Menu
Coddy logo textTech

Iteración de diccionarios

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 15 de 56.

Iterar un diccionario con for te entrega ambas mitades de cada par como una tupla:

let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
    print("\(item) costs \(price)")
}

El orden de iteración no está garantizado. Ejecuta el bucle dos veces y podrías ver las entradas en un orden diferente. Cuando el orden importe, ordena primero:

for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
    print("\(item): \(price)")
}

La expresión dentro de sorted(by:) es un cierre (closure): compara dos pares ($0 y $1) por su propiedad key. Los cierres tienen su propio capítulo más adelante; por ahora, trata esto como una receta para ordenar un diccionario.

Dos propiedades más útiles: .keys y .values te dan la colección de solo claves o solo valores.

challenge icon

Desafío

Fácil

El diccionario scores mapea nombres de estudiantes a puntuaciones Int. Imprime:

  1. Cada entrada como <name>: <score>, ordenada alfabéticamente por nombre, una por línea
  2. Sum: <total> de todos los valores (usa .values y reduce)
  3. Above 70: <count> donde count es cuántas entradas tienen una puntuación estrictamente mayor que 70

Para el diccionario por defecto, la salida es:

Alice: 85
Bob: 60
Cara: 90
Dan: 72
Sum: 307
Above 70: 3

Hoja de referencia

Itera un diccionario con for para obtener tuplas de clave-valor:

let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
    print("\(item) costs \(price)")
}

El orden de iteración no está garantizado. Ordena primero cuando el orden sea importante:

for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
    print("\(item): \(price)")
}

Accede solo a las claves o a los valores con .keys y .values:

prices.keys    // collection of keys
prices.values  // collection of values

Pruébalo tú mismo

let scores: [String: Int] = [
    "Alice": 85, "Bob": 60, "Cara": 90, "Dan": 72
]

// TODO: imprimir entradas ordenadas; sumar mediante reduce en .values; contar > 70
quiz iconPonte a prueba

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