Menu
Coddy logo textTech

Über ein Set iterieren

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 36 von 68.

Nachdem Sie nun Elemente zu Ihrem Set hinzufügen, prüfen und daraus entfernen können, ist es an der Zeit zu lernen, wie man über alle Elemente iteriert. Da Ihr Go-Set auf einer Map basiert, können Sie die vertraute for...range-Schleife verwenden, um auf jedes Element zuzugreifen.

Um über ein Set zu iterieren, verwenden Sie dieselbe Syntax wie beim Iterieren über eine Map, aber Sie interessieren sich nur für die Schlüssel:

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

Beachten Sie, dass wir in der range-Schleife nur eine Variable verwenden. Da wir die Werte (die alle leere Structs sind) nicht benötigen, können wir sie vollständig ignorieren. Dies wird jede Farbe in Ihrem Set ausgeben, eine pro Zeile.

Sie können auch die Form mit zwei Variablen verwenden, wenn Sie explizit angeben möchten, dass der Wert ignoriert wird:

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

Bedenken Sie, dass Maps in Go beim Iterieren keine bestimmte Reihenfolge garantieren, sodass Ihre Set-Elemente bei jedem Programmdurchlauf in einer anderen Reihenfolge ausgegeben werden können. Dies ist ein völlig normales Verhalten für Sets, da sie für die Prüfung der Zugehörigkeit und nicht für die Beibehaltung einer Reihenfolge konzipiert sind.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

Erstellen Sie einen Musik-Playlist-Analysator, der Song-Sammlungen verarbeitet und detaillierte Informationen über jede Playlist mithilfe des Go-Set-Idioms anzeigt. Diese Herausforderung zeigt, wie man über Sets iteriert, um deren Inhalte zu untersuchen und darüber zu berichten.

Sie erhalten zwei Eingaben:

  • Einen String, der Rock-Songs enthält, getrennt durch Kommas (z. B. "Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine")
  • Einen String, der Pop-Songs enthält, getrennt durch Kommas (z. B. "Shape of You,Blinding Lights,Watermelon Sugar,Levitating")

Ihre Aufgabe ist es:

  1. Erstellen Sie zwei Sets unter Verwendung des Go-Idioms map[string]struct{}, um Rock-Songs und Pop-Songs separat zu speichern
  2. Parsen Sie beide Eingabestrings, indem Sie sie an den Kommas aufteilen, um die einzelnen Songtitel zu erhalten
  3. Fügen Sie jeden Song dem entsprechenden Set hinzu, wobei Sie das leere Struct-Literal {} als Wert verwenden
  4. Zeigen Sie die Analyse der Rock-Playlist an:
    • Header: "Rock Playlist Analysis:"
    • Anzahl: "Total rock songs: [count]"
    • Songs-Header: "Songs in rock playlist:"
    • Jeder Song in einer eigenen Zeile: "♪ [song_title]"
  5. Zeigen Sie die Analyse der Pop-Playlist an:
    • Header: "Pop Playlist Analysis:"
    • Anzahl: "Total pop songs: [count]"
    • Songs-Header: "Songs in pop playlist:"
    • Jeder Song in einer eigenen Zeile: "♪ [song_title]"
  6. Erstellen Sie eine kombinierte Playlist, indem Sie beide Sets in ein neues Set zusammenführen
  7. Zeigen Sie die Analyse der kombinierten Playlist an:
    • Header: "Combined Playlist Analysis:"
    • Anzahl: "Total unique songs: [count]"
    • Songs-Header: "All songs in combined playlist:"
    • Jeder Song in einer eigenen Zeile: "♫ [song_title]"
  8. Zeigen Sie abschließend eine Zusammenfassung an:
    • "Playlist Summary:"
    • "Rock songs: [rock_count]"
    • "Pop songs: [pop_count]"
    • "Combined unique songs: [combined_count]"

Verwenden Sie das strings-Paket, um die Eingabestrings an den Kommas aufzuteilen. Um über jedes Set zu iterieren, verwenden Sie die for...range-Schleife mit einer einzelnen Variable, um nur auf die Schlüssel (Songtitel) zuzugreifen. Diese Herausforderung zeigt, wie das Iterieren über Go-Sets es Ihnen ermöglicht, alle Elemente in einer Sammlung zu untersuchen, was es perfekt für Analyse- und Berichtsaufgaben macht.

Spickzettel

Um über ein Set in Go zu iterieren, verwenden Sie die for...range-Schleife mit einer einzelnen Variablen, um nur auf die Schlüssel zuzugreifen:

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

Sie können auch die Form mit zwei Variablen verwenden und den Wert explizit ignorieren:

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

Beachten Sie, dass Maps in Go beim Iterieren keine bestimmte Reihenfolge garantieren, sodass Set-Elemente bei jedem Programmdurchlauf in unterschiedlicher Reihenfolge erscheinen können.

Probier es selbst

package main

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

func main() {
	// Ganze Zeilen mit bufio.Scanner lesen (verarbeitet Songtitel mit Leerzeichen)
	scanner := bufio.NewScanner(os.Stdin)

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

	// Sets mit dem Go-Idiom map[string]struct{} erstellen
	rockSet := make(map[string]struct{})
	popSet := make(map[string]struct{})

	// Eingabestrings parsen und Sets befüllen
	rockList := strings.Split(rockSongs, ",")
	popList := strings.Split(popSongs, ",")

	// TODO: Schreiben Sie Ihren Code unten
	// Songs zu ihren jeweiligen Sets hinzufügen
	// Rock-Playlist-Analyse anzeigen (Songs für eine konsistente Ausgabe sortieren)
	// Pop-Playlist-Analyse anzeigen (Songs für eine konsistente Ausgabe sortieren)
	// Kombinierte Playlist-Analyse erstellen und anzeigen (Songs für eine konsistente Ausgabe sortieren)
	// Playlist-Zusammenfassung anzeigen
	// Denken Sie daran: Map-Keys in Slice umwandeln, sortieren und dann für eine konsistente Reihenfolge iterieren

	_ = rockSet
	_ = popSet
	_ = rockList
	_ = popList
	_ = fmt.Sprintf
	_ = sort.Strings
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf