Ce face HashMap::get
get(&cheie) returnează o referință la valoare, în Some, sau None dacă cheia nu există. Este varianta sigură a indexării m[&cheie], care oprește programul pentru o cheie lipsă.
Cheia se dă prin referință și poate avea o formă „împrumutată” a tipului cheii: pentru HashMap<String, _> poți căuta cu un &str (m.get("Ana")), fără să creezi un String nou. Asta permite constrângerea K: Borrow<Q>.
contains_key răspunde doar cu true sau false. Dacă ai nevoie și de valoare, folosește direct get, ca să nu cauți de două ori. Pentru o valoare implicită când cheia lipsește: m.get(k).copied().unwrap_or(0).
Parametri
| Parametru | Descriere |
|---|---|
k |
Referință la cheia căutată (sau la o formă împrumutată a ei, de exemplu &str pentru chei String). |
Ce returnează
get: Option<&V>. contains_key: bool.
Exemple
Exemplul 1: Prețuri la magazin
use std::collections::HashMap;
fn main() {
let preturi = HashMap::from([("pâine", 5), ("lapte", 8), ("cafea", 25)]);
println!("{:?}", preturi.get("lapte"));
println!("{:?}", preturi.get("ceai"));
match preturi.get("cafea") {
Some(p) => println!("cafeaua costă {p} lei"),
None => println!("nu avem cafea"),
}
println!("avem ceai? {}", preturi.contains_key("ceai"));
let pret_ceai = preturi.get("ceai").copied().unwrap_or(0);
println!("prețul ceaiului (0 dacă lipsește): {pret_ceai}");
}
Rezultat
Some(8)
None
cafeaua costă 25 lei
avem ceai? false
prețul ceaiului (0 dacă lipsește): 0
Exemplul 2: Codurile județelor, citite de la tastatură
Textul citit este String, iar cheile sunt &str; cod.as_str() face legătura.
use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let judete = HashMap::from([("IS", "Iași"), ("CJ", "Cluj"), ("B", "București"), ("TM", "Timiș")]);
for linie in io::stdin().lock().lines() {
let cod = linie.expect("eroare la citire").trim().to_uppercase();
if let Some(nume) = judete.get(cod.as_str()) {
println!("{cod} = {nume}");
} else {
println!("{cod}: cod necunoscut");
}
}
}
Ce scrie utilizatorul (intrare)
is
CJ
XY
Rezultat
IS = Iași
CJ = Cluj
XY: cod necunoscut
Greșeli frecvente
- Folosești
m["cheie"]pentru o cheie care poate lipsi: programul se oprește. Foloseșteget. - Scrii
if m.contains_key(k) { let v = m[k]; ... }: cauți de două ori.if let Some(v) = m.get(k)caută o dată. - Te aștepți ca
getsă returneze valoarea, nu o referință:let n: i32 = m.get("a").unwrap();dă expected `i32`, found `&i32`. Adaugă.copied()(pentru tipuriCopy) sau.cloned().
Comenzi înrudite
HashMap::get_mut: Returnează o referință mutabilă la valoarea unei chei, ca s-o modifici pe loc; None dacă cheia nu există.HashMap::insert: Pune o pereche cheie-valoare în dicționar; dacă cheia exista, înlocuiește valoarea și o returnează pe cea veche.HashMap::entry: Caută o cheie o singură dată și îți dă „locul” ei (Entry), ca să inserezi, să citești sau să modifici fără o a doua căutare.Vec::get: Citește elementul de pe o poziție fără risc de panic: returnează Some(&element) sau None dacă poziția nu există.BTreeMap: Dicționar cu cheile mereu sortate: aceleași operații ca HashMap, dar parcurgerea și afișarea sunt în ordinea cheilor.