Acceder a los elementos de un vector
Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 10 de 66.
Una vez que tengas un vector con elementos, necesitarás acceder a los valores individuales. Rust proporciona dos enfoques diferentes para obtener elementos de un vector, cada uno con sus propias ventajas y desventajas entre conveniencia y seguridad.
El primer método utiliza la sintaxis de índice con corchetes, de manera similar a los arrays:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // obtiene 10
let third = numbers[2]; // obtiene 30Si bien esta sintaxis es familiar y concisa, tiene un riesgo significativo: si intentas acceder a un índice que no existe, tu programa entrará en pánico y fallará:
let numbers = vec![10, 20, 30];
let invalid = numbers[5]; // ¡Esto entrará en pánico!El segundo método utiliza el método .get(), el cual proporciona acceso seguro:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // devuelve Some(10)
let invalid = numbers.get(5); // devuelve NoneEl método .get() devuelve un Option, ya sea Some(value) si el índice existe, o None si no existe. Esto te obliga a manejar la posibilidad de que el elemento no exista, evitando fallos y haciendo que tu código sea más robusto.
Desafío
FácilEscribe una función get_element_at que reciba un vector numbers y un índice idx, y devuelva el elemento en ese índice utilizando un acceso seguro.
Usa el método .get() para acceder de forma segura al elemento. Si el índice existe, devuelve el valor. Si el índice no existe, devuelve -1 como valor predeterminado.
Parámetros:
numbers(Vec<i32>): El vector al que se va a accederidx(i32): El índice a recuperar
Devuelve: El elemento en el índice dado, o -1 si el índice no existe (i32)
Hoja de referencia
Rust proporciona dos métodos para acceder a los elementos de un vector:
Sintaxis de índice con corchetes:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // gets 10
let third = numbers[2]; // gets 30Este método provocará un pánico (panic) si el índice no existe:
let invalid = numbers[5]; // This will panic!El método .get() para un acceso seguro:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // returns Some(10)
let invalid = numbers.get(5); // returns NoneEl método .get() devuelve un tipo Option: ya sea Some(value) si el índice existe, o None si no existe. Esto evita cierres inesperados y requiere un manejo explícito de los elementos ausentes.
Pruébalo tú mismo
fn get_element_at(numbers: Vec<i32>, idx: i32) -> i32 {
// Escribe el código aquí
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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