Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Crea 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 è:

  1. Creare un set usando l'idioma di Go map[string]struct{} per memorizzare i libri di narrativa
  2. Analizzare la prima stringa di input suddividendola in corrispondenza delle virgole per ottenere i singoli titoli dei libri
  3. Aggiungere ogni libro al set usando il literal di struct vuoto {} come valore
  4. Analizzare la seconda stringa di input suddividendola in corrispondenza delle virgole per ottenere l'elenco dei libri da rimuovere
  5. Per ogni libro da rimuovere, verificare se esiste nel set usando l'idioma della virgola ok
  6. 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]"
  7. Usare la funzione delete() per rimuovere i libri presenti nel set
  8. 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]"
  9. 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"

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
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online