Lecciones del módulo (1/2)
Colecciones y HashMap
Las colecciones son estructuras de datos capaces de contener múltiples valores. A diferencia de los tipos primitivos de matriz y tupla, los datos a los que hacen referencia estas colecciones se almacenan en el montón, lo que significa que no es necesario conocer la cantidad de datos en el momento de la compilación y puede crecer o reducirse dinámicamente durante la ejecución del programa.
Las dos colecciones más utilizadas en Rust son vectores (Vec<T>) y mapas clave-valor (HashMap<K, V>).
Vectores (Vec<T>)
Los vectores le permiten almacenar más de un valor del mismo tipo en una única estructura de datos que coloca todos los valores uno al lado del otro en la memoria:
fn main() {
// Creazione di un vettore vuoto mutabile
let mut v: Vec<i32> = Vec::new();
// Oppure usando la macro vec!
let mut v2 = vec![1, 2, 3];
// Aggiunta di elementi
v.push(5);
v.push(6);
// Accesso agli elementi per indice
let third = v2[2];
println!("Il terzo elemento è: {}", third);
}
Mapa Hash (HashMap<K, V>)
La colección HashMap<K, V> almacena una asignación de claves de tipo K a valores de tipo V. Funciona mediante una función hash, que determina cómo se colocan estas claves y valores en la memoria. Es extremadamente útil cuando desea buscar datos no por un índice numérico, sino por una clave (por ejemplo, un nombre o ID).
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
// Inserimento chiave-valore
scores.insert(String::from("Blu"), 10);
scores.insert(String::from("Giallo"), 50);
// Lettura di un valore (ritorna un Option<&V>)
let team_name = String::from("Blu");
let score = scores.get(&team_name);
match score {
Some(val) => println!("Punteggio: {}", val),
None => println!("Nessun punteggio trovato."),
}
}
Pruébalo tú mismo
Ejercicio 1: Operaciones básicas en Vec
Declare una matriz mutable de números enteros llamada v usando Vec::new(). Agregue los elementos 10, 20 y 30 al vector secuencialmente usando el método push. Finalmente, imprima el primer elemento del vector (índice 0) usando println!.
Mostrar pista
Utilice `let mut v = Vec::new();` para el vector, inserte los elementos con `v.push(valore)` e ingrese con `v[0]`.
Solución disponible después de 3 intentos
Ejercicio 2: puntuación con HashMap
Importar std::collections::HashMap. En principal, declare un HashMap mutable llamado puntuaciones para almacenar claves de cadena y valores i32. Ingrese una puntuación de 50 para el usuario 'Alice'. Extraiga la partitura de forma segura utilizando el método get y unwrap() para imprimirla.
Mostrar pista
No olvides `use std::collections::HashMap;`. Inserte con `scores.insert(String::from("Alice"), 50);` y recupere el valor con `.get("Alice").unwrap()`.
Solución disponible después de 3 intentos
Ejercicio 3: Duplicar los valores en un vector
Defina una función llamada double_values que tome como entrada una referencia a un vector de números enteros &[i32] y devuelva un nuevo vector Vec<i32> que contenga los mismos elementos multiplicados por 2.
Mostrar pista
La función debe desplazarse por los elementos del segmento e insertarlos multiplicados por 2 en el nuevo vector a regresar.
Solución disponible después de 3 intentos