Trabalhando com HashSet
Acompanhe valores únicos.
Trabalhando com HashSet é uma aula grátis de Learn Rust Coding no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn Rust Coding, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn Rust Coding inclui 4 aulas no total.
O que é uma HashSet?
Uma HashSet armazena uma coleção de valores únicos. Não há duplicatas nem chaves, apenas membros.
Ela é excelente para responder rapidamente a uma pergunta: "já vi este valor antes?"
Criando um conjunto
Assim como HashMap, HashSet está em std::collections e precisa de uma importação com use.
Crie um conjunto vazio com HashSet::new() e declare-o como mut para adicionar itens.
use std::collections::HashSet;
fn main() {
let mut s: HashSet<i32> = HashSet::new();
s.insert(1);
s.insert(2);
println!("size: {}", s.len());
}Inserção e duplicatas
O método insert retorna um bool: true se o valor era novo e false se já estava presente.
Inserir uma duplicata não faz nada, portanto o conjunto permanece automaticamente sem duplicatas.
use std::collections::HashSet;
fn main() {
let mut s = HashSet::new();
println!("{}", s.insert(5));
println!("{}", s.insert(5));
println!("len = {}", s.len());
}Verificando associação
Use contains para verificar se um valor está no conjunto. Ele retorna um bool.
Esse é o motivo mais comum para escolher um conjunto: consultas rápidas e claras.
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"));
}Removendo membros
O método remove recebe um valor e retorna true se ele estava presente e foi removido.
Remover algo que não está presente simplesmente retorna false.
use std::collections::HashSet;
fn main() {
let mut s = HashSet::new();
s.insert(7);
println!("{}", s.remove(&7));
println!("{}", s.remove(&7));
}Criando a partir de um iterador
Você pode coletar diretamente qualquer iterador de valores em uma HashSet.
Essa é uma maneira rápida de eliminar duplicatas: forneça uma lista com repetições e o conjunto manterá cada valor uma única vez.
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());
}Iterando sobre um conjunto
Percorra um conjunto com um loop for para visitar cada membro.
Assim como em HashMap, a ordem de iteração não é garantida e pode mudar a cada execução.
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);
}União
O método union fornece todos os valores que estão em um ou no outro conjunto.
Ele retorna um iterador; portanto, você pode coletá-lo em um novo conjunto ou percorrê-lo em um loop.
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());
}Interseção
O método intersection fornece os valores encontrados em ambos os conjuntos.
Ele é perfeito para encontrar elementos comuns, como etiquetas compartilhadas ou amigos em comum.
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());
}Diferença
O método difference fornece os valores do primeiro conjunto que não estão no segundo.
Inverta a ordem para obter a diferença oposta. Também existe symmetric_difference para itens presentes em exatamente um dos conjuntos.
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());
}Subconjunto e disjunção
Use is_subset para verificar se todos os membros de um conjunto estão em outro.
Use is_disjoint para verificar se dois conjuntos não compartilham nenhum valor. Ambos retornam um bool simples.
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));
}Verificação rápida
Você insere o mesmo valor duas vezes em uma HashSet.
Recapitulação
Uma HashSet contém valores únicos e permite verificações rápidas com contains.
Você inseriu, removeu, eliminou duplicatas usando collect e combinou conjuntos com union, intersection e difference.
Perguntas Frequentes
A aula “Trabalhando com HashSet” é grátis?
Sim — o texto completo de “Trabalhando com HashSet” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn Rust Coding, atualize para CoddyKit PRO. O curso de Learn Rust Coding inclui 4 aulas no total.
O que vou aprender em “Trabalhando com HashSet”?
Acompanhe valores únicos. Você pratica Learn Rust Coding com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Learn Rust Coding?
Nenhuma experiência prévia é necessária. Learn Rust Coding no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Trabalhando com HashSet”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Learn Rust Coding?
Sim. Cada aula de Learn Rust Coding inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Construindo um HashMap
- API de entrada e valores padrão
- Trabalhando com HashSet
- Contagem e agrupamento