Menu
Coddy logo textTech

Agrupación de valores

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 16 de 56.

El patrón de subíndice predeterminado (default-subscript) es la base de dos formas cotidianas.

Contador de frecuencia: cuenta cuántas veces aparece cada clave.

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: agrupar valores bajo una clave 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"]]

El valor predeterminado para el caso de agrupación (bucketing) es un array vacío. El valor default: se utiliza solo cuando falta la clave, entonces el lado derecho muta la entrada en el lugar.

challenge icon

Desafío

Intermedio

Lee una sola línea de entrada: una lista de palabras separadas por comas.

Imprime, en este orden:

  1. Una línea por cada longitud de palabra que aparezca en la entrada, ordenada de la más corta a la más larga, en el formato <length>: <count> donde count es cuántas palabras de esa longitud aparecieron
  2. Most common length: <n> donde n es la longitud con el recuento más alto. Rompe los empates eligiendo la longitud más corta.

Para la entrada hi,hello,yo,hey,bonjour,bye, la salida es:

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

(Las longitudes 2 y 3 aparecen ambas dos veces. El empate se rompe por la más corta, así que 2 gana).

Hoja de referencia

Contador de frecuencia – cuenta las ocurrencias de cada clave usando default: 0:

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

Agrupación – agrupa valores bajo una clave derivada usando default: []:

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

El valor default: se utiliza solo cuando la clave no existe; el resultado se muta entonces en el mismo lugar.

Pruébalo tú mismo

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

// TODO: contar palabras por longitud; imprimir ordenado; imprimir la más común (empates: la más corta)
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo