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 Gos Set-Idiom 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, um eindeutige Farbnamen zu speichern:

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 Lookup-Zeiten, genau wie bei regulären Maps.

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 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 Sie jede Sprache ausgeben, sobald sie angetroffen wird:
    • 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 eigenen Zeile: "- [language]"

Verwenden Sie das Paket strings, um den Eingabestring aufzuteilen, und das Paket strconv, um den Anzahl-String in eine Ganzzahl 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.

Spickzettel

Um ein Set in Go zu erstellen, verwenden Sie das map[T]struct{}-Muster, wobei T der Elementtyp ist:

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

Sie können ein Set auch mit Startwerten initialisieren, indem Sie die Map-Literal-Syntax verwenden:

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

Jeder Wert ist ein leeres Struct-Literal {}, das den Nullwert von struct{} erzeugt und keinen Speicherplatz beansprucht, während es dem Schlüssel ermöglicht, in der Map zu existieren.

Um zu prüfen, ob ein Element im Set vorhanden ist, verwenden Sie das Comma-Ok-Idiom:

_, exists := languageSet[language]

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)
	
	// Anzahl-String in Ganzzahl umwandeln (für diese Herausforderung nicht benötigt)
	_, _ = strconv.Atoi(countStr)
	
	// Den Sprachen-String an Kommas aufteilen
	languages := strings.Split(languagesStr, ",")
	
	// Ein Set mit dem map[string]struct{} Idiom erstellen
	languageSet := make(map[string]struct{})
	
	// TODO: Schreiben Sie Ihren Code unten
	// Jede Sprache verarbeiten und prüfen, ob sie bereits im Set existiert
	// Verwenden Sie das Comma-OK-Idiom: _, exists := languageSet[language]
	// Geben Sie "Added: [language]" oder "Already exists: [language]" aus
	// Sprachen zum Set mit einem leeren Struct-Literal {} hinzufügen
	
	// Zusammenfassende Informationen ausgeben
	// Anzahl der verarbeiteten Sprachen und der eindeutigen Sprachen ausgeben
	
	// Alle eindeutigen Sprachen im Set ausgeben
	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