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.
Desafío
IntermedioLee una sola línea de entrada: una lista de palabras separadas por comas.
Imprime, en este orden:
- 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>dondecountes cuántas palabras de esa longitud aparecieron Most common length: <n>dondenes 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)
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
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras3Diccionarios
Declaración de diccionariosBúsqueda opcionalActualización de diccionariosIteración de diccionariosAgrupación de valoresResumen - Inventario6Funciones de orden superior - Parte 2
compactMapflatMapsorted(by:)Construcción de pipelinesRepaso - Tabla de posiciones