Menu
Coddy logo textTech

Ein Set erstellen

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

Da du nun das Konzept hinter GOs Set-Idiom verstehst, ist es an der Zeit, es in die Praxis umzusetzen, indem du dein erstes Set erstellst. Der Prozess ist unkompliziert und folgt denselben Mustern, die du bereits mit Maps kennengelernt hast.

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": {},
}

Beachte, dass jeder Wert ein leeres Struct-Literal {} ist. Dadurch wird der Nullwert von struct{} erstellt, der keinen Speicherplatz benötigt und dennoch ermöglicht, dass der Schlüssel in der Map existiert.

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

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

Du erhältst zwei Eingaben:

  • Eine Zeichenfolge, die die Anzahl der zu verarbeitenden Sprachen darstellt (z. B. "6")
  • Eine Zeichenfolge mit durch Kommas getrennten Programmiersprachen (z. B. "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

Deine Aufgabe ist es:

  1. Ein Set mithilfe des Go-Idioms map[string]struct{} zu erstellen, um eindeutige Programmiersprachen zu speichern
  2. Die Eingabezeichenfolge durch Aufteilen an den Kommas zu analysieren, um einzelne Sprachnamen zu erhalten
  3. Jede Sprache mithilfe des leeren Struktur-Literals {} als Wert zu deinem Set hinzuzufügen
  4. Die Verarbeitungsergebnisse anzuzeigen, indem du jede Sprache ausgibst, sobald sie angetroffen wird:
    • Wenn die Sprache neu im Set ist: "Added: [language]"
    • Wenn die Sprache bereits im Set vorhanden ist: "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:
    • Kopfzeile: "Programming languages in set:"
    • Jede Sprache in einer eigenen Zeile: "- [language]"

Verwende das Paket strings, um die Eingabezeichenfolge aufzuteilen, und das Paket strconv, um die Anzahl als Zeichenfolge in eine Ganzzahl umzuwandeln. Um zu prüfen, ob eine Sprache bereits im Set vorhanden ist, bevor du sie hinzufügst, verwende das Komma-Ok-Idiom: _, exists := languageSet[language]. Diese Herausforderung zeigt, wie das Go-Set-Idiom eine effiziente Möglichkeit bietet, eindeutige Elemente zu verfolgen und Duplikate in deinen 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

Übe selbstständig: Online-Go-Compiler