Ce face BTreeSet
BTreeSet<T> este perechea sortată a lui HashSet. insert returnează true pentru o valoare nouă și false pentru una existentă, contains verifică existența, iar union, intersection, difference, is_subset merg la fel, cu rezultate în ordine.
Elementele trebuie să implementeze Ord. Pe lângă operațiile de mulțime, primești și cele bazate pe ordine: first, last, range, pop_first. Este cea mai simplă cale de a obține „valorile distincte, sortate” dintr-o listă: v.into_iter().collect::<BTreeSet<_>>().
Parametri
| Parametru | Descriere |
|---|---|
value |
Valoarea adăugată (prin valoare) sau căutată (prin referință). |
Ce returnează
insert și contains returnează bool.
Exemple
Exemplul 1: Etichete distincte, sortate
use std::collections::BTreeSet;
fn main() {
let mut etichete = BTreeSet::new();
for e in ["rust", "web", "linux", "rust", "baze-de-date", "web"] {
etichete.insert(e);
}
println!("{:?}", etichete);
println!("are linux? {}", etichete.contains("linux"));
println!("insert rust din nou: {}", etichete.insert("rust"));
println!("{} etichete", etichete.len());
}
Rezultat
{"baze-de-date", "linux", "rust", "web"}
are linux? true
insert rust din nou: false
4 etichete
Exemplul 2: Operații cu mulțimi, cu rezultat sortat
use std::collections::BTreeSet;
fn main() {
let a: BTreeSet<u32> = [5, 1, 9, 3, 7].into();
let b: BTreeSet<u32> = [3, 4, 5, 6].into();
println!("a = {:?}", a);
println!("a ∪ b = {:?}", a.union(&b).collect::<Vec<_>>());
println!("a ∩ b = {:?}", &a & &b);
println!("a - b = {:?}", a.difference(&b).collect::<Vec<_>>());
}
Rezultat
a = {1, 3, 5, 7, 9}
a ∪ b = [1, 3, 4, 5, 6, 7, 9]
a ∩ b = {3, 5}
a - b = [1, 7, 9]
Exemplul 3: Literele unui nume, distincte și sortate
Literele cu diacritice („ș”, „ț”) au coduri Unicode mai mari, deci apar la final.
use std::collections::BTreeSet;
fn main() {
let litere: BTreeSet<char> = "Ștefan cel Mare și Țepeș"
.to_lowercase()
.chars()
.filter(|c| c.is_alphabetic())
.collect();
println!("{}", litere.iter().collect::<String>());
}
Rezultat
acefilmnprtșț
Greșeli frecvente
- Te aștepți la ordinea inserării: elementele sunt mereu sortate.
- Pui
f64într-unBTreeSet:f64nu implementeazăOrd. Folosește întregi sau unVecsortat cutotal_cmp.
Comenzi înrudite
BTreeSet::range: Parcurge doar elementele dintr-un interval de valori, în ordine; util pentru „următorul după x” sau „toate dintre a și b”.BTreeSet::first: Returnează cel mai mic (first) sau cel mai mare (last) element al mulțimii sortate; None dacă e goală.HashSet: O mulțime: ține fiecare valoare o singură dată și răspunde foarte repede dacă o valoare există. Ordinea nu e garantată.BTreeMap: Dicționar cu cheile mereu sortate: aceleași operații ca HashMap, dar parcurgerea și afișarea sunt în ordinea cheilor.HashSet::union: Operațiile cu mulțimi: reuniune (în oricare), intersecție (în ambele), diferență (doar în prima), diferență simetrică (în exact una).