Arbejd med HashSet
Hold styr på unikke værdier.
Arbejd med HashSet er en gratis Lær at programmere i Rust-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær at programmere i Rust, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.
Hvad er et HashSet?
Et HashSet gemmer en samling af unikke værdier. Der er ingen dubletter og ingen nøgler, kun medlemmer.
Det er perfekt til hurtigt at besvare ét spørgsmål: "Har jeg set denne værdi før?"
Oprettelse af et sæt
Ligesom HashMap findes HashSet i std::collections og kræver en use-import.
Opret et tomt sæt med HashSet::new(), og erklær det som mut, hvis du vil tilføje elementer.
use std::collections::HashSet;
fn main() {
let mut s: HashSet<i32> = HashSet::new();
s.insert(1);
s.insert(2);
println!("size: {}", s.len());
}Indsættelse og dubletter
Metoden insert returnerer en bool: true, hvis værdien var ny, og false, hvis den allerede var til stede.
Det sker ikke noget, når du indsætter en dublet, så sættet forbliver automatisk unikt.
use std::collections::HashSet;
fn main() {
let mut s = HashSet::new();
println!("{}", s.insert(5));
println!("{}", s.insert(5));
println!("len = {}", s.len());
}Test af medlemskab
Brug contains til at kontrollere, om en værdi findes i sættet. Den returnerer en bool.
Det er den mest almindelige grund til at vælge et sæt: hurtige og tydelige opslag.
use std::collections::HashSet;
fn main() {
let mut s = HashSet::new();
s.insert("red");
s.insert("blue");
println!("has red? {}", s.contains("red"));
println!("has green? {}", s.contains("green"));
}Fjernelse af medlemmer
Metoden remove tager en værdi og returnerer true, hvis den var til stede og blev fjernet.
Hvis du fjerner noget, der ikke findes, returneres blot false.
use std::collections::HashSet;
fn main() {
let mut s = HashSet::new();
s.insert(7);
println!("{}", s.remove(&7));
println!("{}", s.remove(&7));
}Oprettelse fra en iterator
Du kan samle enhver iterator med værdier direkte i et HashSet.
Det er en hurtig måde at fjerne dubletter på: giv den en liste med gentagelser, så beholder sættet hver værdi én gang.
use std::collections::HashSet;
fn main() {
let nums = [1, 2, 2, 3, 3, 3];
let unique: HashSet<i32> = nums.iter().copied().collect();
println!("distinct: {}", unique.len());
}Gennemløb af et sæt
Gennemløb et sæt med en for-løkke for at besøge hvert medlem.
Ligesom med HashMap er gennemløbsrækkefølgen ikke garanteret og kan være forskellig fra kørsel til kørsel.
use std::collections::HashSet;
fn main() {
let s: HashSet<i32> = [10, 20, 30].into_iter().collect();
let mut total = 0;
for v in &s {
total += v;
}
println!("sum = {}", total);
}Forening
Metoden union giver alle værdier, der findes i et af de to sæt.
Den returnerer en iterator, så du skal samle den i et nyt sæt eller gennemløbe den.
use std::collections::HashSet;
fn main() {
let a: HashSet<i32> = [1, 2, 3].into_iter().collect();
let b: HashSet<i32> = [3, 4].into_iter().collect();
let u: HashSet<i32> = a.union(&b).copied().collect();
println!("union size: {}", u.len());
}Snit
Metoden intersection giver værdier, der findes i begge sæt.
Den er perfekt til at finde fælles elementer, f.eks. delte mærker eller fælles venner.
use std::collections::HashSet;
fn main() {
let a: HashSet<i32> = [1, 2, 3].into_iter().collect();
let b: HashSet<i32> = [2, 3, 4].into_iter().collect();
let common: Vec<i32> = a.intersection(&b).copied().collect();
println!("common count: {}", common.len());
}Forskel
Metoden difference giver værdier, der findes i det første sæt, men ikke i det andet.
Byt om på rækkefølgen for at få den modsatte forskel. Der findes også symmetric_difference til elementer, der findes i præcis ét sæt.
use std::collections::HashSet;
fn main() {
let a: HashSet<i32> = [1, 2, 3].into_iter().collect();
let b: HashSet<i32> = [2].into_iter().collect();
let only_a: Vec<i32> = a.difference(&b).copied().collect();
println!("only in a: {}", only_a.len());
}Delmængde og disjunkte sæt
Brug is_subset til at kontrollere, om hvert element i ét sæt findes i et andet.
Brug is_disjoint til at teste, at to sæt slet ikke har nogen fælles værdier. Begge returnerer en almindelig bool.
use std::collections::HashSet;
fn main() {
let a: HashSet<i32> = [1, 2].into_iter().collect();
let b: HashSet<i32> = [1, 2, 3].into_iter().collect();
println!("a subset of b? {}", a.is_subset(&b));
}Hurtigt tjek
Du indsætter den samme værdi to gange i et HashSet.
Opsummering
Et HashSet indeholder unikke værdier med hurtige contains-kontroller.
Du indsatte, fjernede, fjernede dubletter via collect og kombinerede sæt med union, intersection og difference.
Lær Rust med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 39
- Lektioner
- 144
Ofte stillede spørgsmål
Er lektionen “Arbejd med HashSet” gratis?
Ja — alle 3 lektioner i læringssporet Lær at programmere i Rust, inklusive “Arbejd med HashSet”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Arbejd med HashSet”?
Hold styr på unikke værdier. Du øver dig i Lær at programmere i Rust med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lær at programmere i Rust?
Der kræves ingen tidligere erfaring. Lær at programmere i Rust på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Arbejd med HashSet”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lær at programmere i Rust-lektion?
Ja. Alle Lær at programmere i Rust-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Opbyg en HashMap
- Entry API og standardværdier
- Arbejd med HashSet
- Optælling og gruppering