Iterando Dicionários
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 15 de 56.
Iterar um dicionário com for fornece ambas as metades de cada par como uma tupla:
let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
print("\(item) costs \(price)")
}A ordem de iteração não é garantida. Execute o loop duas vezes e você poderá ver as entradas em uma ordem diferente. Quando a ordenação for importante, ordene primeiro:
for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
print("\(item): \(price)")
}A expressão dentro de sorted(by:) é uma closure: ela compara dois pares ($0 e $1) pela sua propriedade key. As closures ganham um capítulo próprio mais tarde; por enquanto, trate isso como uma receita para ordenar um dicionário.
Mais duas propriedades úteis: .keys e .values fornecem a coleção apenas de chaves ou apenas de valores.
Desafio
FácilO dicionário scores mapeia nomes de alunos para pontuações do tipo Int. Imprima:
- Cada entrada como
<name>: <score>, ordenada por nome em ordem alfabética, uma por linha Sum: <total>abrangendo todos os valores (use.valuesereduce)Above 70: <count>ondecounté a quantidade de entradas que possuem uma pontuação estritamente maior que70
Para o dicionário padrão, a saída é:
Alice: 85
Bob: 60
Cara: 90
Dan: 72
Sum: 307
Above 70: 3Folha de consulta
Itere sobre um dicionário com for para obter tuplas de chave-valor:
let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
print("\(item) costs \(price)")
}A ordem de iteração não é garantida. Ordene primeiro quando a ordem for importante:
for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
print("\(item): \(price)")
}Acesse apenas as chaves ou os valores com .keys e .values:
prices.keys // coleção de chaves
prices.values // coleção de valoresExperimente você mesmo
let scores: [String: Int] = [
"Alice": 85, "Bob": 60, "Cara": 90, "Dan": 72
]
// TODO: imprimir entradas ordenadas; somar via reduce em .values; contar > 70
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