Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

O dicionário scores mapeia nomes de alunos para pontuações do tipo Int. Imprima:

  1. Cada entrada como <name>: <score>, ordenada por nome em ordem alfabética, uma por linha
  2. Sum: <total> abrangendo todos os valores (use .values e reduce)
  3. Above 70: <count> onde count é a quantidade de entradas que possuem uma pontuação estritamente maior que 70

Para o dicionário padrão, a saída é:

Alice: 85
Bob: 60
Cara: 90
Dan: 72
Sum: 307
Above 70: 3

Folha 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 valores

Experimente 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
quiz iconTeste seus conhecimentos

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