Menu
Coddy logo textTech

Iterare su un insieme

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 36 di 68.

Ora che sai aggiungere, controllare e rimuovere elementi dal tuo insieme, è il momento di imparare a scorrere tutti gli elementi. Poiché il tuo insieme Go è basato su una mappa, puoi usare il familiare ciclo for...range per accedere a ciascun elemento.

Per iterare su un set, usi la stessa sintassi che useresti per iterare su una mappa, ma ti interessano solo le chiavi:

for color := range colors {
    fmt.Println(color)
}

Nota che stiamo usando una sola variabile nel ciclo sull’intervallo. Poiché non abbiamo bisogno dei valori (che sono tutti struct vuote), possiamo ignorarli completamente. Questo stamperà ogni colore del tuo insieme, uno per riga.

Puoi anche usare la forma con due variabili, se preferisci essere esplicito sul fatto di ignorare il valore:

for color, _ := range colors {
    fmt.Println(color)
}

Tieni presente che le mappe in Go non garantiscono un ordine specifico durante l'iterazione, quindi gli elementi del tuo insieme potrebbero essere stampati in un ordine diverso ogni volta che esegui il programma. Questo è un comportamento del tutto normale per gli insiemi, poiché sono progettati per verificare l'appartenenza e non per mantenere un ordine.

challenge icon

Sfida

Facile

Crea un analizzatore di playlist musicali che elabori raccolte di brani e mostri informazioni dettagliate su ogni playlist usando l'idioma Go per gli insiemi. Questa sfida mostra come iterare sugli insiemi per esaminarne e riportarne i contenuti.

Riceverai due input:

  • Una stringa contenente brani rock separati da virgole (ad es. "Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine")
  • Una stringa contenente brani pop separati da virgole (ad es. "Shape of You,Blinding Lights,Watermelon Sugar,Levitating")

Il tuo compito è:

  1. Creare due insiemi usando l'idioma Go map[string]struct{} per memorizzare separatamente i brani rock e quelli pop
  2. Analizzare entrambe le stringhe di input dividendole in corrispondenza delle virgole per ottenere i singoli titoli dei brani
  3. Aggiungere ogni brano all'insieme appropriato usando il valore letterale della struct vuota {}
  4. Mostrare l'analisi della playlist rock:
    • Intestazione: "Rock Playlist Analysis:"
    • Conteggio: "Total rock songs: [count]"
    • Intestazione dei brani: "Songs in rock playlist:"
    • Ogni brano su una riga separata: "♪ [song_title]"
  5. Mostrare l'analisi della playlist pop:
    • Intestazione: "Pop Playlist Analysis:"
    • Conteggio: "Total pop songs: [count]"
    • Intestazione dei brani: "Songs in pop playlist:"
    • Ogni brano su una riga separata: "♪ [song_title]"
  6. Creare una playlist combinata unendo entrambi gli insiemi in un nuovo insieme
  7. Mostrare l'analisi della playlist combinata:
    • Intestazione: "Combined Playlist Analysis:"
    • Conteggio: "Total unique songs: [count]"
    • Intestazione dei brani: "All songs in combined playlist:"
    • Ogni brano su una riga separata: "♫ [song_title]"
  8. Infine, mostrare un riepilogo:
    • "Playlist Summary:"
    • "Rock songs: [rock_count]"
    • "Pop songs: [pop_count]"
    • "Combined unique songs: [combined_count]"

Usa il pacchetto strings per dividere le stringhe di input in corrispondenza delle virgole. Per iterare su ogni insieme, usa il ciclo for...range con una singola variabile per accedere solo alle chiavi (i titoli dei brani). Questa sfida mostra come l'iterazione sugli insiemi Go permetta di esaminare tutti gli elementi di una raccolta, rendendola ideale per attività di analisi e reportistica.

Provalo tu

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// Leggi le righe complete usando bufio.Scanner (gestisce i titoli delle canzoni con spazi)
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	rockSongs := scanner.Text()
	scanner.Scan()
	popSongs := scanner.Text()

	// Crea insiemi usando l'idioma di Go map[string]struct{}
	rockSet := make(map[string]struct{})
	popSet := make(map[string]struct{})

	// Analizza le stringhe di input e popola gli insiemi
	rockList := strings.Split(rockSongs, ",")
	popList := strings.Split(popSongs, ",")

	// TODO: Scrivi il tuo codice qui sotto
	// Aggiungi le canzoni ai rispettivi insiemi
	// Mostra l'analisi della playlist rock (ordina le canzoni per ottenere un output coerente)
	// Mostra l'analisi della playlist pop (ordina le canzoni per ottenere un output coerente)
	// Crea e mostra l'analisi della playlist combinata (ordina le canzoni per ottenere un output coerente)
	// Mostra il riepilogo della playlist
	// Ricorda: converti le chiavi della map in uno slice, ordinalo, poi itera per mantenere un ordine coerente

	_ = rockSet
	_ = popSet
	_ = rockList
	_ = popList
	_ = fmt.Sprintf
	_ = sort.Strings
}
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