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).
Desafio
MédioLeia uma única linha de entrada: uma lista de palavras separadas por vírgula.
Imprima, nesta ordem:
- Uma linha por comprimento de palavra que aparece na entrada, ordenada do mais curto ao mais longo, no formato
<length>: <count>ondecounté quantas palavras desse comprimento apareceram Most common length: <n>ondené 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)
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