HashMap::len în Rust

len spune câte perechi cheie-valoare are dicționarul, is_empty dacă nu are niciuna, iar clear le șterge pe toate.

Sintaxă
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
pub fn clear(&mut self)

Ce face HashMap::len

len() returnează numărul de chei (fiecare cheie apare o singură dată). is_empty() este len() == 0. Ambele sunt instantanee.

clear() șterge toate perechile, dar păstrează memoria alocată, ca dicționarul să poată fi umplut din nou fără realocări. Dacă ai nevoie de perechile scoase, folosește drain().

Ce returnează

len: usize; is_empty: bool; clear: nimic.

Exemple

Exemplul 1: Pagini vizitate

Au fost 6 vizite, dar doar 3 pagini distincte: len() numără cheile.

use std::collections::HashMap;

fn main() {
    let mut vizite: HashMap<&str, u32> = HashMap::new();
    println!("la început: len = {}, is_empty = {}", vizite.len(), vizite.is_empty());

    for pagina in ["/", "/blog", "/", "/contact", "/blog", "/"] {
        *vizite.entry(pagina).or_insert(0) += 1;
    }
    let total: u32 = vizite.values().sum();
    println!("{} vizite pe {} pagini distincte", total, vizite.len());

    vizite.clear();
    println!("după clear: len = {}, is_empty = {}", vizite.len(), vizite.is_empty());
}

Rezultat

la început: len = 0, is_empty = true
6 vizite pe 3 pagini distincte
după clear: len = 0, is_empty = true

Exemplul 2: Mesaj diferit pentru coș gol

use std::collections::HashMap;

fn rezumat(cos: &HashMap<&str, u32>) -> String {
    if cos.is_empty() {
        String::from("Coșul este gol.")
    } else {
        format!("Ai {} produse diferite în coș.", cos.len())
    }
}

fn main() {
    let mut cos = HashMap::new();
    println!("{}", rezumat(&cos));
    cos.insert("mere", 2);
    cos.insert("lapte", 1);
    println!("{}", rezumat(&cos));
}

Rezultat

Coșul este gol.
Ai 2 produse diferite în coș.

Greșeli frecvente

  • Crezi că len() adună valorile. Numără doar cheile; pentru total folosește m.values().sum::<u32>().
  • Te aștepți ca clear() să elibereze memoria. Capacitatea rămâne; apelează shrink_to_fit() dacă e nevoie.

Comenzi înrudite

  • HashMap: Dicționarul din Rust: asociază fiecărei chei o valoare și o găsește foarte repede după cheie. Ordinea nu este garantată.
  • HashMap::keys: keys parcurge doar cheile, values doar valorile, iar values_mut dă valorile ca referințe mutabile, pentru modificare.
  • HashMap::drain: Golește dicționarul și dă toate perechile ca iterator, prin valoare; dicționarul rămâne gol, dar utilizabil.
  • Vec::len: len returnează numărul de elemente din vector; is_empty spune dacă vectorul nu are niciun element.