Eliminar una tarea
Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 18 de 66.
Desafío
FácilRecibirás tres entradas: primero, una lista de tareas existentes separadas por comas; segundo, un número de tarea a eliminar (indexación basada en 1); y tercero, una nueva tarea para añadir después de la eliminación. Lee todas las entradas, crea un vector a partir de las tareas, elimina la tarea especificada, añade la nueva tarea y muestra la lista de tareas actualizada.
Requisitos:
- Lee la primera entrada que contiene descripciones de tareas separadas por comas (por ejemplo,
Buy groceries,Call dentist,Finish homework) - Divide la cadena por comas para obtener las tareas individuales
- Crea un vector mutable y añade cada tarea a él
- Lee la segunda entrada y conviértela en un entero (el número de tarea a eliminar, usando indexación basada en 1)
- Convierte el índice basado en 1 a basado en 0 y usa
.remove()para eliminar la tarea en ese índice - Lee la tercera entrada que contiene una nueva tarea para añadir
- Usa
.push()para añadir la nueva tarea al vector - Imprime el número total de tareas en el formato:
Total tasks: X - Imprime cada tarea en una línea separada en el formato:
Task: [task description]
Entrada:
- Primera línea: Descripciones de tareas separadas por comas (por ejemplo,
Buy groceries,Call dentist,Finish homework) - Segunda línea: Un entero que representa el número de tarea a eliminar (indexación basada en 1)
- Tercera línea: Una nueva tarea para añadir (por ejemplo,
Study for exam)
Salida:
- Primera línea:
Total tasks: Xdonde X es el número total de tareas después de la eliminación y adición - Líneas siguientes: Cada tarea impresa como
Task: [task description]
Pruébalo tú mismo
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Leer las tareas separadas por comas
let tasks_input = lines.next().unwrap().unwrap();
// Leer el número de tarea a eliminar (indexación basada en 1)
let task_to_remove = lines.next().unwrap().unwrap();
let task_number: usize = task_to_remove.trim().parse().unwrap();
// Leer la nueva tarea para añadir
let new_task = lines.next().unwrap().unwrap();
// TODO: Escribe tu código abajo
// Dividir tasks_input por comas y crear un vector mutable
// Eliminar la tarea en el índice especificado (convertir de base 1 a base 0)
// Añadir la nueva tarea al vector
// Mostrar los resultados
// Imprimir el total de tareas en formato: Total tasks: X
// Imprimir cada tarea en formato: Task: [task description]
}Todas las lecciones de Logic & Flow
1Flujo de control avanzado
La expresión 'match'Coincidencia de múltiples valoresCoincidencia de rangosLa expresión 'if let'Bucles como expresionesResumen - Analizador de comandos simple4Agrupando datos con Structs
¿Qué es un Struct?Visión general de los StructsAcceso a los campos de un StructStructs mutablesStructs como parámetros de funcionesStructs de tuplaResumen - Crear un Struct de Libro7Manejo de errores con 'Result'
¿Qué es un 'Result'?Uso de 'match' con 'Result'is_ok() e is_err()Atajos: unwrap y expectEl operador de signo de interrogación '?'Parsing de Strings a númerosResumen - Función de división segura10Closures y funciones anónimas
¿Qué es un Closure?Definir un Closure simpleClosures con parámetrosCapturar el entornoResumen - Closure sumador simple2Introducción a los vectores
¿Qué es un vector?Crear un vectorAñadir elementos con pushAcceder a los elementos de un vectorIterar sobre un vectorIteración mutableEliminar elementosResumen: Rastreador de puntuación básico5Pares clave-valor con Hash Maps
¿Qué es un Hash Map?Crear un Hash MapInsertar pares clave-valorAcceder a los valoresIterar sobre un Hash MapActualizar un valorEliminar un parRepaso: Contador de palabras8Proyecto: Inventario simple de artículos
Configuración del proyectoAgregar un artículoVerificar el stockVender un artículoUniendo todo3Lista de tareas en la línea de comandos
Configuración del proyectoAñadir una tareaVer todas las tareasEliminar una tareaCódigo final