Menu
Coddy logo textTech

Agrupando Valores

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 16 de 56.

O padrão default-subscript é a base para duas formas cotidianas.

Contador de frequência: conte quantas vezes cada chave aparece.

let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
    counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]

Bucketing: colete valores sob uma chave derivada:

let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
    byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]

O padrão para o caso de agrupamento (bucketing) é um array vazio. O valor default: é usado apenas quando a chave está ausente, então o lado direito altera a entrada no local (in place).

challenge icon

Desafio

Médio

Leia uma única linha de entrada: uma lista de palavras separadas por vírgula.

Imprima, nesta ordem:

  1. Uma linha por comprimento de palavra que aparece na entrada, ordenada do mais curto ao mais longo, no formato <length>: <count> onde count é quantas palavras desse comprimento apareceram
  2. Most common length: <n> onde n é o comprimento com a contagem mais alta. Resolva empates escolhendo o comprimento mais curto.

Para a entrada hi,hello,yo,hey,bonjour,bye, a saída é:

2: 2
3: 2
5: 1
7: 1
Most common length: 2

(Os comprimentos 2 e 3 aparecem duas vezes. Empate resolvido pelo mais curto, então 2 vence.)

Folha de consulta

Contador de frequência – conte as ocorrências de cada chave usando default: 0:

var counts: [String: Int] = [:]
for letter in letters {
    counts[letter, default: 0] += 1
}

Agrupamento – agrupe valores sob uma chave derivada usando default: []:

var byLength: [Int: [String]] = [:]
for w in words {
    byLength[w.count, default: []].append(w)
}

O valor default: é usado apenas quando a chave está ausente; o resultado é então mutado no local.

Experimente você mesmo

let words = readLine()!.components(separatedBy: ",")

// TODO: contar palavras por comprimento; imprimir ordenado; imprimir a mais comum (empates: a mais curta)
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