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
- Importació:
use std::collections::HashMap;importa el tipusHashMapdes de la biblioteca estàndard. - Creació:
let mut scores = HashMap::new();crea un nouHashMapbuit. - Inserció:
scores.insert(String::from("Blue"), 10);insereix un parell clau-valor alHashMap. - Visualització:
println!("{:?}", scores);imprimeix el contingut delHashMap.
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
- Accés:
let score = scores.get(&team_name);obté una referència opcional al valor associat amb la clauteam_name. - 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
- Iteració:
for (key, value) in &scores { ... }itera sobre cada parell clau-valor delHashMap. - 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
- Actualització:
scores.insert(String::from("Blue"), 25);actualitza el valor associat amb la clauBlue.
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
- Divisió del Text:
text.split_whitespace()divideix el text en paraules. - Inserció o Actualització:
let count = map.entry(word).or_insert(0);obté una referència mutable al valor associat amb la clauword, inserint0si la clau no existeix. - 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.
