Actualización de diccionarios
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 14 de 56.
Escribes en un diccionario de la misma manera que lees de uno: con el subíndice.
var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3 // añade la clave
prices["apple"] = 2 // actualiza una clave existente
prices["apple"] = nil // elimina la claveDos métodos con nombre hacen lo mismo de forma más explícita:
prices.updateValue(5, forKey: "milk") // devuelve el valor anterior, o nil
prices.removeValue(forKey: "bread") // devuelve el valor eliminado, o nilLos métodos nombrados devuelven el valor anterior, lo cual es útil cuando necesitas saber si la clave ya existía.
El patrón de subíndice por defecto de la lección anterior se encadena perfectamente con la mutación; así es como se construye un contador sin escribir un if:
var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]Desafío
IntermedioLee una sola línea de entrada: una lista separada por comas de operaciones sobre un diccionario inicial. Cada operación es una de las siguientes:
set:<key>:<value>añade o actualiza (el valor es un entero)add:<key>:<value>añade el valor al existente (utiliza el patrón de subíndice por defecto)del:<key>elimina la clave
Después de aplicar cada operación en orden a un [String: Int] inicialmente vacío, imprime las claves en orden alfabético, una por línea, en el formato <key>=<value>.
Para la entrada set:a:5,add:a:3,set:b:1,del:b,add:c:2, la salida es:
a=8
c=2Hoja de referencia
Modifica un diccionario usando subíndices o métodos con nombre:
prices["bread"] = 3 // añadir
prices["apple"] = 2 // actualizar
prices["apple"] = nil // eliminar
prices.updateValue(5, forKey: "milk") // devuelve el valor antiguo o nil
prices.removeValue(forKey: "bread") // devuelve el valor eliminado o nilUsa el patrón de subíndice con valor predeterminado para mutar sin if:
var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]Pruébalo tú mismo
let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]
// TODO: analizar cada op y aplicar set/add/del; imprimir las claves ordenadas con sus valores
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