0Pricing
Learn Rust Coding · Aula

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

  1. Construindo um HashMap
  2. API de entrada e valores padrão
  3. Trabalhando com HashSet
  4. Contagem e agrupamento
← Voltar para Learn Rust Coding