Busca Opcional
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 13 de 56.
Subscritos de dicionário sempre retornam um Optional: o valor quando a chave existe, nil quando não existe. O Swift força você a lidar com ambos os casos.
let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p) // Optional(1)Três maneiras idiomáticas de lidar com o opcional. Escolha a que melhor se adapta à situação.
1. if let: trate ambos os ramos explicitamente:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. coalescência nula (nil-coalescing) ??: forneça um valor padrão (fallback) inline:
let p = prices["olive"] ?? 0 // 03. subscript com valor padrão: resultado idêntico, mas o valor padrão também permanece se você escrever de volta para essa chave:
var counts = ["a": 2]
counts["b", default: 0] += 1 // counts == ["a": 2, "b": 1]Desafio
FácilO dicionário prices é fornecido. Leia uma única linha de entrada: uma lista separada por vírgulas de itens que o usuário deseja comprar.
Para cada item, na ordem de entrada, procure-o em prices. Imprima uma linha por item:
<item> @ <price>quando o item estiver no dicionário<item> not soldcaso contrário
Após listar todos os itens, imprima uma linha final: Total: <sum>. Trate itens ausentes como custando 0 usando o operador de coalescência nula.
Para a entrada apple,bread,olive,milk, a saída é:
apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8Folha de consulta
Subscritos de dicionário retornam um Optional — o valor se a chave existir, nil caso contrário.
1. if let — trate ambos os ramos:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. Nil-coalescing ?? — forneça um valor padrão (fallback):
let p = prices["olive"] ?? 0 // 03. Subscript com default — valor padrão que também funciona na escrita:
var counts = ["a": 2]
counts["b", default: 0] += 1 // ["a": 2, "b": 1]Experimente você mesmo
let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")
// TODO: busca por item; imprimir '@ preço' ou 'não vendido'; somar com ?? 0
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings a Fundo
Contagem e ÍndicesCase e TrimBusca em StringsDivisão e JunçãoSubstituindo SubstringsRecapitulação - Verificação de Nome de Usuário4Conjuntos
Criando ConjuntosUnião e InterseçãoSubtração e Diferença SimétricaSubconjunto e SuperconjuntoRecapitulação - Filtro de Tags7Projeto - Monitor de Hábitos
Visão Geral do ProjetoMarcar como Concluído10Projeto - Mecanismo de Quiz
Visão Geral do ProjetoFazer Perguntas2Intervalos e Strides
Fechado vs Meio-AbertoStrideMétodos de IntervaloIntervalos no SwitchRecapitulação - Grade de Calendário5Funções de Ordem Superior Parte 1
MapFilterReduceEncadeando map, filter, reduceRecapitulação - Estatísticas de Palavras3Dicionários
Declarando DicionáriosBusca OpcionalAtualizando DicionáriosIterando DicionáriosAgrupando ValoresRecapitulação - Inventário6Funções de Ordem Superior Parte 2
compactMapflatMapsorted(by:)Construindo PipelinesRecapitulação - Leaderboard