En aquest tema, aprendrem sobre els HashMaps en Rust, una col·lecció que permet emmagatzemar parells clau-valor. Els HashMaps són útils quan necessitem associar dades entre si i accedir-hi de manera eficient.

Què és un HashMap?

Un HashMap és una estructura de dades que emmagatzema elements en parells clau-valor. Cada clau és única i es mapeja a un valor. Els HashMaps són molt eficients per a la cerca, inserció i eliminació d'elements.

Creació d'un HashMap

Per utilitzar HashMap, primer hem d'importar-lo des de la biblioteca estàndard de Rust.

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    println!("{:?}", scores);
}

Explicació del codi

  1. Importació: use std::collections::HashMap; importa el tipus HashMap des de la biblioteca estàndard.
  2. Creació: let mut scores = HashMap::new(); crea un nou HashMap buit.
  3. Inserció: scores.insert(String::from("Blue"), 10); insereix un parell clau-valor al HashMap.
  4. Visualització: println!("{:?}", scores); imprimeix el contingut del HashMap.

Accés als Valors

Podem accedir als valors emmagatzemats en un HashMap utilitzant les claus corresponents.

fn main() {
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    let team_name = String::from("Blue");
    let score = scores.get(&team_name);

    match score {
        Some(&score) => println!("Score for {}: {}", team_name, score),
        None => println!("No score found for {}", team_name),
    }
}

Explicació del codi

  1. Accés: let score = scores.get(&team_name); obté una referència opcional al valor associat amb la clau team_name.
  2. Coincidència de Patrons: match score { ... } maneja el cas en què la clau existeix (Some) i el cas en què no (None).

Iteració sobre un HashMap

Podem iterar sobre els elements d'un HashMap utilitzant un bucle for.

fn main() {
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    for (key, value) in &scores {
        println!("{}: {}", key, value);
    }
}

Explicació del codi

  1. Iteració: for (key, value) in &scores { ... } itera sobre cada parell clau-valor del HashMap.
  2. Visualització: println!("{}: {}", key, value); imprimeix cada clau i valor.

Actualització de Valors

Podem actualitzar els valors d'un HashMap utilitzant la clau corresponent.

fn main() {
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    scores.insert(String::from("Blue"), 25);

    println!("{:?}", scores);
}

Explicació del codi

  1. Actualització: scores.insert(String::from("Blue"), 25); actualitza el valor associat amb la clau Blue.

Exercicis Pràctics

Exercici 1

Crea un HashMap per emmagatzemar el nombre de vegades que cada paraula apareix en una frase.

Solució

use std::collections::HashMap;

fn main() {
    let text = "hello world wonderful world";

    let mut map = HashMap::new();

    for word in text.split_whitespace() {
        let count = map.entry(word).or_insert(0);
        *count += 1;
    }

    println!("{:?}", map);
}

Explicació del codi

  1. Divisió del Text: text.split_whitespace() divideix el text en paraules.
  2. Inserció o Actualització: let count = map.entry(word).or_insert(0); obté una referència mutable al valor associat amb la clau word, inserint 0 si la clau no existeix.
  3. Increment: *count += 1; incrementa el comptador per a cada paraula.

Resum

En aquest tema, hem après a:

  • Crear i inicialitzar un HashMap.
  • Inserir i accedir a valors en un HashMap.
  • Iterar sobre els elements d'un HashMap.
  • Actualitzar els valors d'un HashMap.

Els HashMaps són una eina poderosa per gestionar col·leccions de dades associades i són molt útils en diverses aplicacions de programació. En el següent mòdul, explorarem la gestió d'errors en Rust.

© Copyright 2024. Tots els drets reservats