Rimuovere elementi da un insieme
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 35 di 68.
A volte devi rimuovere elementi dal tuo insieme e Go rende tutto semplice grazie alla funzione integrata delete(). Poiché in realtà il tuo insieme è una mappa, rimuovere un elemento funziona esattamente come rimuovere una chiave da una mappa.
Per rimuovere un elemento dal tuo insieme, usa la funzione delete() con il tuo insieme e l'elemento che vuoi rimuovere:
delete(colors, "red")La funzione delete() accetta due parametri: la mappa (il tuo insieme) e la chiave che vuoi rimuovere. Se l'elemento esiste nell'insieme, viene rimosso. Se l'elemento non esiste, la funzione non fa nulla: non viene generato alcun errore.
Questo comportamento è perfetto per gli insiemi perché spesso vuoi assicurarti che un elemento non sia presente, indipendentemente dal fatto che fosse presente inizialmente. L’operazione è rapida ed efficiente e mantiene i vantaggi in termini di prestazioni dell’implementazione sottostante delle mappe di Go.
Sfida
FacileCrea un sistema di gestione dei libri di una biblioteca che rimuove libri da raccolte di generi diversi usando l'idioma dei set di Go. Questa sfida mostra come usare la funzione delete() per rimuovere elementi dai set tenendo traccia del processo di rimozione.
Riceverai due input:
- Una stringa contenente i libri della raccolta di narrativa, separati da virgole (ad es.,
"1984,Dune,Foundation,Neuromancer,Brave New World") - Una stringa contenente i libri da rimuovere, separati da virgole (ad es.,
"Dune,Harry Potter,Foundation,Twilight,1984")
Il tuo compito è:
- Creare un set usando l'idioma di Go
map[string]struct{}per memorizzare i libri di narrativa - Analizzare la prima stringa di input suddividendola in corrispondenza delle virgole per ottenere i singoli titoli dei libri
- Aggiungere ogni libro al set usando il literal di struct vuoto
{}come valore - Analizzare la seconda stringa di input suddividendola in corrispondenza delle virgole per ottenere l'elenco dei libri da rimuovere
- Per ogni libro da rimuovere, verificare se esiste nel set usando l'idioma della virgola ok
- Mostrare il processo di rimozione per ogni libro elaborato:
- Se il libro esiste nella raccolta:
"Removing: [book_title]" - Se il libro non esiste nella raccolta:
"Not found: [book_title]"
- Se il libro esiste nella raccolta:
- Usare la funzione
delete()per rimuovere i libri presenti nel set - Dopo aver elaborato tutte le richieste di rimozione, mostrare un riepilogo:
"Initial collection size: [initial_count]""Removal requests: [requests_count]""Books successfully removed: [removed_count]""Books not found: [not_found_count]""Final collection size: [final_count]"
- Infine, elencare tutti i libri rimasti nella raccolta:
- Intestazione:
"Remaining books in fiction collection:" - Ogni libro su una riga separata:
"- [book_title]" - Se non rimane alcun libro:
"- Collection is empty"
- Intestazione:
Usa il pacchetto strings per suddividere le stringhe di input in corrispondenza delle virgole. Questa sfida mostra come la funzione delete() rimuova in modo sicuro gli elementi da un set di Go senza generare errori, neanche quando si tenta di rimuovere elementi inesistenti, rendendola perfetta per le operazioni di pulizia.
Provalo tu
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// Leggi l'input usando Scanner per supportare i titoli dei libri con spazi
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
fictionBooks := scanner.Text()
scanner.Scan()
booksToRemove := scanner.Text()
// Analizza le stringhe di input
fictionList := strings.Split(fictionBooks, ",")
removeList := strings.Split(booksToRemove, ",")
// TODO: Scrivi il tuo codice qui sotto
// 1. Crea un insieme usando map[string]struct{} per memorizzare i libri di narrativa
// 2. Aggiungi ogni libro di fictionList all'insieme
// 3. Elabora ogni libro in removeList e verifica se esiste
// 4. Mostra il processo di rimozione e usa la funzione delete()
// 5. Mostra le statistiche riepilogative
// 6. Elenca i libri rimasti nella raccolta
// Ricorda di ordinare i libri rimasti per ottenere un output coerente
_ = sort.Strings // rimuovi questa riga dopo aver usato sort
_ = fmt.Println // rimuovi questa riga dopo aver usato fmt
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamenti6Gli insiemi in Go idiomatico
L'idioma degli insiemi in GoCreare un insiemeAggiungere elementi a un insiemeVerificare l'appartenenzaRimuovere elementi da un insiemeIterare su un insiemeRiepilogo - Nomi utente univociEsercitati da solo: Compilatore Go online