Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 1 de 213/14 en el curso~12 min
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:

Code
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).

Code
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

Ejercicio#rust.m7.l1.e1
Intentos: 0Cargando...

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!.

Cargando editor...
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

Ejercicio#rust.m7.l1.e2
Intentos: 0Cargando...

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.

Cargando editor...
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

Ejercicio#rust.m7.l1.e3
Intentos: 0Cargando...

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.

Cargando editor...
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