Menu
Coddy logo textTech

Ein Set erstellen

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

Nachdem Sie nun das Konzept hinter dem Set-Idiom von Go verstanden haben, ist es an der Zeit, es in die Praxis umzusetzen, indem Sie Ihr erstes Set erstellen. Der Prozess ist unkompliziert und folgt denselben Mustern, die Sie bereits bei Maps gelernt haben.

Um ein Set in Go zu erstellen, deklarieren Sie eine Variable mit dem map[T]struct{} Muster, wobei T der Typ der Elemente ist, die Sie speichern möchten. So erstellen Sie ein Set zum Speichern eindeutiger Farbnamen:

colors := make(map[string]struct{})

Sie können ein Set auch mit einigen Startwerten unter Verwendung der Map-Literal-Syntax initialisieren:

colors := map[string]struct{}{
    "red":   {},
    "blue":  {},
    "green": {},
}

Beachten Sie, dass jeder Wert ein leeres Struct-Literal {} ist. Dies erzeugt den Nullwert von struct{}, der keinen Speicherplatz beansprucht, während der Schlüssel dennoch in der Map existieren kann.

Das Schöne an diesem Ansatz ist, dass er die bestehende Map-Infrastruktur von Go nutzt und gleichzeitig echte Set-Semantik bietet – jeder Farbname kann nur einmal vorkommen, und man erhält schnelle Nachschlagezeiten, genau wie bei regulären Maps.

challenge icon

Aufgabe

Einfach

Erstellen Sie einen Tracker für Programmiersprachen-Präferenzen, der das Go-Set-Idiom zum Speichern eindeutiger Elemente demonstriert. Diese Herausforderung zeigt, wie man das Muster map[string]struct{} verwendet, um Programmiersprachen ohne Duplikate zu verfolgen.

Sie erhalten zwei Eingaben:

  • Einen String, der die Anzahl der zu verarbeitenden Sprachen darstellt (z. B. "6")
  • Einen String, der Programmiersprachen enthält, die durch Kommas getrennt sind (z. B. "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

Ihre Aufgabe ist es:

  1. Ein Set unter Verwendung des Go-Idioms map[string]struct{} zu erstellen, um eindeutige Programmiersprachen zu speichern
  2. Den Eingabestring zu parsen, indem Sie ihn an den Kommas aufteilen, um einzelne Sprachnamen zu erhalten
  3. Jede Sprache zu Ihrem Set hinzuzufügen, wobei das leere Struct-Literal {} als Wert verwendet wird
  4. Die Verarbeitungsergebnisse anzuzeigen, indem jede Sprache ausgegeben wird, sobald sie auftritt:
    • Wenn die Sprache neu im Set ist: "Added: [language]"
    • Wenn die Sprache bereits im Set existiert: "Already exists: [language]"
  5. Nach der Verarbeitung aller Sprachen eine Zusammenfassung anzuzeigen:
    • "Total languages processed: [total_count]"
    • "Unique languages: [unique_count]"
  6. Schließlich alle eindeutigen Sprachen im Set aufzulisten:
    • Header: "Programming languages in set:"
    • Jede Sprache in einer separaten Zeile: "- [language]"

Verwenden Sie das Paket strings, um den Eingabestring aufzuteilen, und das Paket strconv, um den Count-String in einen Integer umzuwandeln. Um zu prüfen, ob eine Sprache bereits im Set existiert, bevor Sie sie hinzufügen, verwenden Sie das Comma-Ok-Idiom: _, exists := languageSet[language]. Diese Herausforderung demonstriert, wie das Go-Set-Idiom eine effiziente Möglichkeit bietet, eindeutige Elemente zu verfolgen und Duplikate in Ihren Daten zu verhindern.

Probier es selbst

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// Eingabe lesen
	var countStr string
	var languagesStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&languagesStr)
	
	// Konvertiere den Zähl-String in einen Integer (für diese Aufgabe nicht benötigt)
	_, _ = strconv.Atoi(countStr)
	
	// Teile den Sprachen-String anhand von Kommas auf
	languages := strings.Split(languagesStr, ",")
	
	// Erstelle ein Set unter Verwendung des map[string]struct{} Idioms
	languageSet := make(map[string]struct{})
	
	// TODO: Schreibe deinen Code unten
	// Verarbeite jede Sprache und prüfe, ob sie bereits im Set existiert
	// Verwende das comma ok Idiom: _, exists := languageSet[language]
	// Gib "Added: [language]" oder "Already exists: [language]" aus
	// Füge Sprachen zum Set hinzu, indem du das leere struct-Literal {} verwendest
	
	// Zusammenfassende Informationen ausgeben
	// Gib die Gesamtzahl der verarbeiteten Sprachen und die Anzahl der eindeutigen Sprachen aus
	
	// Gib alle eindeutigen Sprachen im Set aus
	fmt.Println("Programming languages in set:")
	// Map in Slice umwandeln und für eine konsistente Ausgabe sortieren
	// Jede Sprache im Format "- [language]" auflisten
}
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