Menu
Coddy logo textTech

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 clave

Dos 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 nil

Los 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]
challenge icon

Desafío

Intermedio

Lee 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=2

Hoja 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 nil

Usa 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
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