Ce face HashMap::keys
keys() returnează un iterator peste &K, values() peste &V. Sunt utile pentru totaluri (values().sum()), maxime (values().max()) sau pentru a obține lista cheilor. Ordinea este aceeași aleatorie ca la iter(): sortează dacă afișezi.
values_mut() dă &mut V pentru fiecare valoare, ca să le modifici pe toate dintr-o trecere (o scumpire de 10%, resetarea contoarelor). Cheile nu pot fi modificate niciodată pe loc.
Variantele into_keys() și into_values() consumă dicționarul și dau cheile sau valorile prin valoare.
Ce returnează
Iteratori: Keys (elemente &K), Values (&V), ValuesMut (&mut V).
Exemple
Exemplul 1: Salarii: lista angajaților, total și mărire
use std::collections::HashMap;
fn main() {
let mut salarii = HashMap::from([("Ana", 5200), ("Mihai", 4800), ("Ioana", 6100)]);
let mut nume: Vec<&str> = salarii.keys().copied().collect();
nume.sort();
println!("angajați: {:?}", nume);
let total: u32 = salarii.values().sum();
println!("total salarii: {total} lei");
for s in salarii.values_mut() {
*s += *s / 10; // mărire de 10%
}
let mut noi: Vec<u32> = salarii.values().copied().collect();
noi.sort();
println!("după mărire (sortate): {:?}", noi);
}
Rezultat
angajați: ["Ana", "Ioana", "Mihai"]
total salarii: 16100 lei
după mărire (sortate): [5280, 5720, 6710]
Exemplul 2: Cel mai mare salariu și al cui este
values().max() dă doar valoarea. Pentru cheie, căutăm perechea cu iter().max_by_key.
use std::collections::HashMap;
fn main() {
let salarii = HashMap::from([("Ana", 5200), ("Mihai", 4800), ("Ioana", 6100)]);
println!("maxim: {:?}", salarii.values().max());
if let Some((nume, s)) = salarii.iter().max_by_key(|&(_, s)| *s) {
println!("{nume} câștigă cel mai mult: {s} lei");
}
}
Rezultat
maxim: Some(6100)
Ioana câștigă cel mai mult: 6100 lei
Greșeli frecvente
- Afișezi
keys()direct și te aștepți la aceeași ordine la fiecare rulare. Colectează și sortează. - Încerci să modifici o cheie prin
keys(): cheile sunt doar de citit. Scoate perechea curemoveși inserează cheia nouă. values().sum()fără tip: type annotations needed. Scrielet total: u32 = ...sausum::<u32>().
Comenzi înrudite
HashMap::iter: Parcurge perechile din dicționar: iter dă (&cheie, &valoare), iter_mut dă (&cheie, &mut valoare). Ordinea e aleatorie.HashMap::len: len spune câte perechi cheie-valoare are dicționarul, is_empty dacă nu are niciuna, iar clear le șterge pe toate.Iterator::sum: sum adună toate elementele, product le înmulțește; tipul rezultatului trebuie precizat.Iterator::min_by_key: Găsește elementul minim sau maxim după un criteriu: o cheie calculată (by_key) sau o funcție de comparare (by).