Menu
Coddy logo textTech

Búsqueda opcional

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

Los subíndices de los diccionarios siempre devuelven un Optional: el valor cuando la clave existe, nil cuando no. Swift te obliga a manejar ambos casos.

let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p)                          // Optional(1)

Tres formas idiomáticas de lidiar con el optional. Elige la que mejor se adapte a la situación.

1. if let: maneja ambas ramas explícitamente:

if let p = prices["apple"] {
    print("apple costs \(p)")
} else {
    print("unknown")
}

2. nil-coalescing ??: proporciona un valor de respaldo en la misma línea:

let p = prices["olive"] ?? 0    // 0

3. subíndice con valor predeterminado: resultado idéntico, pero el valor predeterminado también se mantiene si vuelves a escribir en esa clave:

var counts = ["a": 2]
counts["b", default: 0] += 1   // counts == ["a": 2, "b": 1]
challenge icon

Desafío

Fácil

Se proporciona el diccionario prices. Lee una sola línea de entrada: una lista separada por comas de los artículos que el usuario desea comprar.

Para cada artículo, en el orden de entrada, búscalo en prices. Imprime una línea por artículo:

  • <item> @ <price> cuando el artículo está en el diccionario
  • <item> not sold en caso contrario

Después de listar cada artículo, imprime una línea final: Total: <sum>. Trata los artículos faltantes como si costaran 0 utilizando el operador de coalescencia nula (nil-coalescing operator).

Para la entrada apple,bread,olive,milk, la salida es:

apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8

Hoja de referencia

Los subíndices de los diccionarios devuelven un Optional — el valor si la clave existe, nil si no.

1. if let — maneja ambas ramas:

if let p = prices["apple"] {
    print("apple costs \(p)")
} else {
    print("unknown")
}

2. Coalescencia nula ?? — proporciona una alternativa:

let p = prices["olive"] ?? 0    // 0

3. Subíndice con valor por defecto — alternativa que también funciona al escribir:

var counts = ["a": 2]
counts["b", default: 0] += 1   // ["a": 2, "b": 1]

Pruébalo tú mismo

let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")

// TODO: búsqueda por artículo; imprimir '@ precio' o 'no se vende'; sumar con ?? 0
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