Ce face HashSet::insert
insert(x) adaugă x și returnează true dacă valoarea nu exista, respectiv false dacă exista deja (mulțimea rămâne neschimbată). Rezultatul este util pentru detectarea duplicatelor fără o verificare separată.
contains(&x) răspunde dacă valoarea este în mulțime. remove(&x) o scoate și returnează true dacă a existat. Ca la HashMap::get, pentru un HashSet<String> poți căuta și șterge cu un &str.
Parametri
| Parametru | Descriere |
|---|---|
value |
Valoarea adăugată (prin valoare) sau căutată / ștearsă (prin referință). |
Ce returnează
Toate trei returnează bool.
Exemple
Exemplul 1: Prezența la curs
use std::collections::HashSet;
fn main() {
let mut prezenti = HashSet::new();
println!("insert Ana: {}", prezenti.insert("Ana"));
println!("insert Mihai: {}", prezenti.insert("Mihai"));
println!("insert Ana din nou: {}", prezenti.insert("Ana"));
println!("Ana prezentă? {}", prezenti.contains("Ana"));
println!("remove Mihai: {}", prezenti.remove("Mihai"));
println!("remove Radu: {}", prezenti.remove("Radu"));
println!("rămân {} persoane", prezenti.len());
}
Rezultat
insert Ana: true
insert Mihai: true
insert Ana din nou: false
Ana prezentă? true
remove Mihai: true
remove Radu: false
rămân 1 persoane
Exemplul 2: Cuvintele importante dintr-o propoziție
Cuvintele de legătură stau într-o mulțime; pentru fiecare cuvânt verificăm forma cu litere mici.
use std::collections::HashSet;
fn main() {
let de_legatura: HashSet<&str> = ["și", "în", "la", "de", "pe", "cu", "a", "iar"].into_iter().collect();
let text = "Ana merge la piață cu mama și cumpără mere de la Ion";
let importante: Vec<&str> = text
.split_whitespace()
.filter(|c| !de_legatura.contains(c.to_lowercase().as_str()))
.collect();
println!("{:?}", importante);
}
Rezultat
["Ana", "merge", "piață", "mama", "cumpără", "mere", "Ion"]
Greșeli frecvente
- Faci
if !s.contains(&x) { s.insert(x); }: două căutări.insertsingur face același lucru și îți spune, prin rezultat, dacă valoarea era nouă. - Uiți
&lacontainspentru numere:s.contains(5)nu compilează; scries.contains(&5).
Comenzi înrudite
HashSet: O mulțime: ține fiecare valoare o singură dată și răspunde foarte repede dacă o valoare există. Ordinea nu e garantată.HashSet::union: Operațiile cu mulțimi: reuniune (în oricare), intersecție (în ambele), diferență (doar în prima), diferență simetrică (în exact una).Vec::contains: Verifică dacă vectorul conține un element egal cu valoarea dată; parcurge elementele unul câte unul.HashMap::insert: Pune o pereche cheie-valoare în dicționar; dacă cheia exista, înlocuiește valoarea și o returnează pe cea veche.BTreeSet: Mulțime cu elementele mereu sortate: fără duplicate, ca HashSet, dar parcurgerea este în ordine crescătoare.