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.
Desafío
FácilEl diccionario scores mapea nombres de estudiantes a puntuaciones Int. Imprime:
- Cada entrada como
<name>: <score>, ordenada alfabéticamente por nombre, una por línea Sum: <total>de todos los valores (usa.valuesyreduce)Above 70: <count>dondecountes cuántas entradas tienen una puntuación estrictamente mayor que70
Para el diccionario por defecto, la salida es:
Alice: 85
Bob: 60
Cara: 90
Dan: 72
Sum: 307
Above 70: 3Hoja 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 valuesPrué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
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 palabras3Diccionarios
Declaración de diccionariosBúsqueda opcionalActualización de diccionariosIteración de diccionariosAgrupación de valoresResumen - Inventario6Funciones de orden superior - Parte 2
compactMapflatMapsorted(by:)Construcción de pipelinesRepaso - Tabla de posiciones