Marcar como completado
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 34 de 56.
La primera funcionalidad: procesar una lista de acciones de "marcar este hábito como completado en este día" y producir un estado final.
Cada línea de entrada es una operación en el formato habit:day donde day está entre 1 y 7. Si el hábito aún no existe, créalo con un arreglo vacío y luego añade el día. Si ya se ha registrado un día para ese hábito, no lo registres dos veces.
Te apoyarás en el patrón de subíndice por defecto del capítulo de diccionarios: habits[name, default: []].append(day) funciona tanto si la clave existe como si no.
Desafío
FácilLee una sola línea de entrada: una lista separada por comas de entradas habit:day (por ejemplo, read:1,read:3,workout:2). Después de aplicar cada operación, imprime los hábitos en orden alfabético, uno por línea, en el formato:
<habit>: <days_sorted_ascending_joined_with_comma>Omite los pares habit:day duplicados.
Para la entrada read:1,read:3,workout:2,read:1,read:5,workout:4, la salida es:
read: 1,3,5
workout: 2,4Hoja de referencia
Usa el patrón de subíndice predeterminado para añadir elementos a un diccionario de arreglos, creando la clave si no existe:
var habits: [String: [Int]] = [:]
habits[name, default: []].append(day)
Para evitar duplicados, verifica antes de añadir:
if !habits[name, default: []].contains(day) {
habits[name, default: []].append(day)
}
Pruébalo tú mismo
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
// TODO: para cada op, analizar nombre:día, añadir el día si aún no está allí;
// luego imprimir los hábitos en orden alfabético con los días ordenados
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 palabras