Ce face HashMap::remove
remove(&cheie) șterge perechea și îți dă înapoi valoarea, mutată (nu o copie), deci o poți folosi mai departe. Dacă cheia nu există, returnează None și nu se întâmplă nimic.
remove_entry returnează și cheia: Some((cheie, valoare)). Pentru a șterge mai multe chei după o condiție, folosește retain; pentru a goli tot dicționarul, clear sau drain.
Parametri
| Parametru | Descriere |
|---|---|
k |
Referință la cheia de șters. |
Ce returnează
Some(valoare) dacă cheia exista, altfel None.
Exemple
Exemplul 1: Produse scoase din coș
use std::collections::HashMap;
fn main() {
let mut cos = HashMap::from([("mere", 3), ("lapte", 2), ("pâine", 1)]);
println!("{:?}", cos.remove("lapte"));
println!("{:?}", cos.remove("lapte"));
println!("mai sunt {} produse", cos.len());
if let Some((cheie, cantitate)) = cos.remove_entry("mere") {
println!("am scos {cheie} x{cantitate}");
}
println!("{:?}", cos);
}
Rezultat
Some(2)
None
mai sunt 2 produse
am scos mere x3
{"pâine": 1}
Exemplul 2: Valoarea scoasă se folosește mai departe
Primim String-ul comenzii, nu o copie, așa că îl putem muta în lista de livrate.
use std::collections::HashMap;
fn main() {
let mut in_asteptare: HashMap<u32, String> = HashMap::new();
in_asteptare.insert(101, String::from("2 pizza"));
in_asteptare.insert(102, String::from("1 supă"));
let mut livrate = Vec::new();
for id in [101, 105] {
match in_asteptare.remove(&id) {
Some(comanda) => livrate.push(comanda),
None => println!("comanda {id} nu există"),
}
}
println!("livrate: {:?}, rămase: {}", livrate, in_asteptare.len());
}
Rezultat
comanda 105 nu există
livrate: ["2 pizza"], rămase: 1
Greșeli frecvente
- Dai cheia prin valoare pentru chei numerice:
m.remove(101)dă expected `&_`, found integer. Scriem.remove(&101). - Ștergi chei într-o buclă
for (k, _) in &m { m.remove(k); }: nu compilează (dicționarul e împrumutat de buclă). Foloseșteretain.
Comenzi înrudite
HashMap::insert: Pune o pereche cheie-valoare în dicționar; dacă cheia exista, înlocuiește valoarea și o returnează pe cea veche.HashMap::retain: Păstrează doar perechile pentru care funcția dată returnează true; restul sunt șterse dintr-o singură trecere.HashMap::drain: Golește dicționarul și dă toate perechile ca iterator, prin valoare; dicționarul rămâne gol, dar utilizabil.HashMap::len: len spune câte perechi cheie-valoare are dicționarul, is_empty dacă nu are niciuna, iar clear le șterge pe toate.BTreeMap: Dicționar cu cheile mereu sortate: aceleași operații ca HashMap, dar parcurgerea și afișarea sunt în ordinea cheilor.