0Pricing
Learn Rust Coding · Lezione

Lavorare con HashSet

Tenga traccia dei valori univoci.

Lavorare con HashSet è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.

Che cos'è una HashSet?

Una HashSet memorizza una raccolta di valori univoci. Non ci sono duplicati né chiavi, ma solo elementi.

È ideale per rispondere rapidamente a una domanda: "ho già visto questo valore?"

Creazione di un set

Come HashMap, anche HashSet si trova in std::collections e richiede un'importazione con use.

Createne uno vuoto con HashSet::new() e dichiaratelo mut per poter aggiungere elementi.

use std::collections::HashSet;

fn main() {
    let mut s: HashSet<i32> = HashSet::new();
    s.insert(1);
    s.insert(2);
    println!("size: {}", s.len());
}

Inserimento e duplicati

Il metodo insert restituisce un bool: true se il valore era nuovo, false se era già presente.

L'inserimento di un duplicato non produce alcun effetto, quindi il set mantiene automaticamente l'unicità.

use std::collections::HashSet;

fn main() {
    let mut s = HashSet::new();
    println!("{}", s.insert(5));
    println!("{}", s.insert(5));
    println!("len = {}", s.len());
}

Verifica dell'appartenenza

Usate contains per verificare se un valore appartiene al set. Restituisce un bool.

Questo è il motivo più comune per scegliere un set: ricerche rapide e chiare.

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"));
}

Rimozione degli elementi

Il metodo remove accetta un valore e restituisce true se era presente ed è stato rimosso.

Rimuovere un elemento assente restituisce semplicemente false.

use std::collections::HashSet;

fn main() {
    let mut s = HashSet::new();
    s.insert(7);
    println!("{}", s.remove(&7));
    println!("{}", s.remove(&7));
}

Creazione da un iteratore

Potete raccogliere direttamente in una HashSet qualsiasi iteratore di valori.

È un modo rapido per eliminare i duplicati: fornite un elenco con ripetizioni e il set conserva ogni valore una sola volta.

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());
}

Scorrimento di un set

Scorrete un set con un ciclo for per visitare ogni elemento.

Come per HashMap, l'ordine di scorrimento non è garantito e può cambiare a ogni esecuzione.

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);
}

Unione

Il metodo union restituisce ogni valore presente in uno dei due set.

Restituisce un iteratore, quindi potete raccoglierlo in un nuovo set oppure scorrerlo.

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());
}

Intersezione

Il metodo intersection restituisce i valori presenti in entrambi i set.

È ideale per trovare gli elementi comuni, come tag condivisi o amici in comune.

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());
}

Differenza

Il metodo difference restituisce i valori presenti nel primo set ma non nel secondo.

Invertite l'ordine per ottenere la differenza opposta. Esiste anche symmetric_difference per gli elementi presenti in uno solo dei due set.

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());
}

Sottoinsieme e disgiunzione

Usate is_subset per verificare se ogni elemento di un set appartiene a un altro.

Usate is_disjoint per verificare che due set non abbiano alcun valore in comune. Entrambi restituiscono un semplice 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));
}

Verifica rapida

Inserite due volte lo stesso valore in una HashSet.

Riepilogo

Una HashSet contiene valori univoci e consente verifiche rapide con contains.

Avete inserito, rimosso, eliminato i duplicati tramite collect e combinato i set con union, intersection e difference.

Domande Frequenti

La lezione «Lavorare con HashSet» è gratuita?

Sì — il testo completo di «Lavorare con HashSet» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.

Cosa imparerò in «Lavorare con HashSet»?

Tenga traccia dei valori univoci. Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Learn Rust Coding?

Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Lavorare con HashSet»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?

Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Costruire una HashMap
  2. Entry API e valori predefiniti
  3. Lavorare con HashSet
  4. Contare e raggruppare
← Torna a Learn Rust Coding