Costruire una HashMap
Inserisca valori e li cerchi tramite chiave.
Costruire una HashMap è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.
Che cos'è una HashMap?
Una HashMap memorizza i dati come coppie chiave-valore. La ricerca avviene tramite una chiave anziché tramite un indice.
Pensate a una rubrica telefonica: un nome (chiave) corrisponde a un numero (valore). Le HashMap sono ideali quando servono ricerche rapide tramite una chiave significativa.
Importazione di HashMap
A differenza di Vec e String, HashMap non fa parte del prelude. Dovete importarla nell'ambito visibile.
Aggiungete una riga use all'inizio del file. In questo modo il nome sarà disponibile in tutto il modulo.
use std::collections::HashMap;
fn main() {
let scores: HashMap<String, i32> = HashMap::new();
println!("empty map len: {}", scores.len());
}Inserimento di coppie
Usate insert per aggiungere una chiave e il relativo valore. Se la chiave esiste già, il vecchio valore viene sostituito.
La mappa deve essere dichiarata mut per consentire l'inserimento.
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert("Alice", 50);
scores.insert("Bob", 30);
println!("{} players", scores.len());
}Inferenza dei tipi
Raramente è necessario scrivere il tipo. Rust deduce HashMap<&str, i32> dalle prime chiamate a insert.
Qui le chiavi sono string slice e i valori sono interi: tutto viene determinato dall'uso.
use std::collections::HashMap;
fn main() {
let mut ages = HashMap::new();
ages.insert("Sam", 28);
ages.insert("Mia", 34);
println!("Sam is {}", ages["Sam"]);
}Recupero dei valori
Il metodo get restituisce un Option. Ottenete Some(&value) se la chiave esiste, oppure None in caso contrario.
Questo vi obbliga a gestire in modo sicuro il caso in cui la chiave non sia presente.
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert("Alice", 50);
match scores.get("Alice") {
Some(v) => println!("score: {}", v),
None => println!("no score"),
}
}Indicizzazione e get
Potete usare l'indicizzazione con map[key], ma questa provoca un panic se la chiave non esiste.
Preferite get quando una chiave potrebbe non essere presente. Usate l'indicizzazione solo quando avete la certezza che la chiave esista.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("x", 1);
// m["y"] would panic!
let v = m.get("y").copied().unwrap_or(0);
println!("y = {}", v);
}Aggiornamento di un valore
Chiamare insert con una chiave già esistente sovrascrive il vecchio valore.
Il valore precedente viene restituito, racchiuso in un Option, così potete esaminarlo se necessario.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("k", 1);
let old = m.insert("k", 9);
println!("old = {:?}, now = {}", old, m["k"]);
}Verifica delle chiavi
Usate contains_key per verificare se una chiave esiste senza recuperarne il valore.
Restituisce un semplice bool, utile nelle condizioni if.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("on", true);
if m.contains_key("on") {
println!("key exists");
}
}Rimozione delle voci
Il metodo remove elimina una chiave e restituisce il relativo valore come Option.
Se la chiave non era presente, ottenete None, quindi la rimozione è sempre sicura.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("a", 1);
let removed = m.remove("a");
println!("removed {:?}, len {}", removed, m.len());
}Scorrimento di una mappa
Un ciclo for su una HashMap restituisce tuple (key, value) per riferimento.
Notate che l'ordine non è specificato e può cambiare tra un'esecuzione e l'altra, perché l'hashing distribuisce gli elementi in modo non prevedibile.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("a", 1);
m.insert("b", 2);
for (k, v) in &m {
println!("{} -> {}", k, v);
}
}Proprietà delle chiavi
Quando inserite valori posseduti, come una String, la mappa ne acquisisce la proprietà.
Dopo l'inserimento non potete più usare quella variabile, a meno che non l'abbiate clonata prima.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
let name = String::from("Alice");
m.insert(name, 50);
// name is moved here; m owns it now
println!("{}", m["Alice"]);
}Verifica rapida
Volete un valore, ma la chiave potrebbe non essere presente.
Riepilogo
Avete imparato a creare una HashMap, inserire coppie e cercare valori con get o tramite indicizzazione.
Avete anche visto contains_key, remove, lo scorrimento e il modo in cui la mappa acquisisce la proprietà delle chiavi inserite.
Domande Frequenti
La lezione «Costruire una HashMap» è gratuita?
Sì — il testo completo di «Costruire una HashMap» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.
Cosa imparerò in «Costruire una HashMap»?
Inserisca valori e li cerchi tramite chiave. Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Costruire una HashMap»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Costruire una HashMap
- Entry API e valori predefiniti
- Lavorare con HashSet
- Contare e raggruppare