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 tipusHashMap
des de la biblioteca estàndard. - Creació:
let mut scores = HashMap::new();
crea un nouHashMap
buit. - 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
, inserint0
si 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.