Atualizando Dicionários
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 14 de 56.
Você escreve em um dicionário da mesma forma que lê de um: com o subscrito.
var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3 // adiciona a chave
prices["apple"] = 2 // atualiza uma chave existente
prices["apple"] = nil // remove a chaveDois métodos nomeados fazem a mesma coisa de forma mais explícita:
prices.updateValue(5, forKey: "milk") // retorna o valor antigo, ou nil
prices.removeValue(forKey: "bread") // retorna o valor removido, ou nilOs métodos nomeados retornam o valor anterior, o que é útil quando você precisa saber se a chave já existia.
O padrão de subscrito com valor padrão da lição anterior se encadeia perfeitamente com mutação; é assim que você constrói um contador sem escrever um if:
var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]Desafio
MédioLeia uma única linha de entrada: uma lista separada por vírgulas de operações em um dicionário inicial. Cada operação é uma das seguintes:
set:<key>:<value>adiciona ou atualiza (o valor é um número inteiro)add:<key>:<value>adiciona o valor ao valor existente (use o padrão de subscrito padrão)del:<key>remove a chave
Após aplicar cada operação em ordem a um [String: Int] inicialmente vazio, imprima as chaves em ordem alfabética, uma por linha, no formato <key>=<value>.
Para a entrada set:a:5,add:a:3,set:b:1,del:b,add:c:2, a saída é:
a=8
c=2Folha de consulta
Modifique um dicionário usando subscrito ou métodos nomeados:
prices["bread"] = 3 // adicionar
prices["apple"] = 2 // atualizar
prices["apple"] = nil // remover
prices.updateValue(5, forKey: "milk") // retorna o valor antigo ou nil
prices.removeValue(forKey: "bread") // retorna o valor removido ou nilUse o padrão de subscrito padrão para realizar mutações sem if:
var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]Experimente você mesmo
let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]
// TODO: analisar cada op e aplicar set/add/del; imprimir chaves ordenadas com valores
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