Trabajar con HashSet
Realice un seguimiento de los valores únicos
Trabajar con HashSet es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué es un HashSet?
Un HashSet almacena una colección de valores únicos. No hay duplicados ni claves, solo elementos.
Es ideal para responder rápidamente a una pregunta: «¿ya había visto este valor?»
Crear un conjunto
Al igual que HashMap, HashSet se encuentra en std::collections y necesita una importación mediante use.
Créelo vacío con HashSet::new() y declárelo como mut para poder añadir elementos.
use std::collections::HashSet;
fn main() {
let mut s: HashSet<i32> = HashSet::new();
s.insert(1);
s.insert(2);
println!("size: {}", s.len());
}Insertar y gestionar duplicados
El método insert devuelve un bool: true si el valor era nuevo y false si ya estaba presente.
Insertar un duplicado no hace nada, por lo que el conjunto mantiene automáticamente la unicidad.
use std::collections::HashSet;
fn main() {
let mut s = HashSet::new();
println!("{}", s.insert(5));
println!("{}", s.insert(5));
println!("len = {}", s.len());
}Comprobar la pertenencia
Use contains para comprobar si un valor está en el conjunto. Devuelve un bool.
Esta es la razón más habitual para elegir un conjunto: búsquedas rápidas y 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"));
}Eliminar elementos
El método remove recibe un valor y devuelve true si estaba presente y se eliminó.
Eliminar algo que no está presente simplemente devuelve false.
use std::collections::HashSet;
fn main() {
let mut s = HashSet::new();
s.insert(7);
println!("{}", s.remove(&7));
println!("{}", s.remove(&7));
}Crear a partir de un iterador
Puede recopilar directamente cualquier iterador de valores en un HashSet.
Es una forma rápida de eliminar duplicados: proporcione una lista con repeticiones y el conjunto conservará cada valor una sola 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());
}Iterar sobre un conjunto
Recorra un conjunto con un bucle for para visitar cada elemento.
Al igual que ocurre con HashMap, el orden de iteración no está garantizado y puede variar en cada ejecución.
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ón
El método union proporciona todos los valores que están en cualquiera de los dos conjuntos.
Devuelve un iterador, por lo que puede recopilarlo en un conjunto nuevo o recorrerlo.
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());
}Intersección
El método intersection produce los valores que se encuentran en ambos conjuntos.
Es perfecto para encontrar elementos comunes, como etiquetas compartidas o amigos en común.
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());
}Diferencia
El método difference produce los valores que están en el primer conjunto, pero no en el segundo.
Invierta el orden para obtener la diferencia opuesta. También existe symmetric_difference para los elementos que están exactamente en uno de los 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 y disjuntos
Use is_subset para comprobar si cada elemento de un conjunto está en otro.
Use is_disjoint para comprobar que dos conjuntos no comparten ningún valor. Ambos devuelven un bool simple.
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));
}Comprobación rápida
Inserta dos veces el mismo valor en un HashSet.
Resumen
Un HashSet contiene valores únicos y permite comprobaciones rápidas con contains.
Insertó y eliminó elementos, quitó duplicados mediante collect y combinó conjuntos con union, intersection y difference.
Preguntas frecuentes
¿La lección «Trabajar con HashSet» es gratis?
Sí — el texto completo de «Trabajar con HashSet» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué aprenderé en «Trabajar con HashSet»?
Realice un seguimiento de los valores únicos Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn Rust Coding?
No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Trabajar con HashSet»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?
Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Crear un HashMap
- Entry API y valores predeterminados
- Trabajar con HashSet
- Contar y agrupar