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.
Aufgabe
EinfachErstelle 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:
- Ein Set mithilfe des Go-Idioms
map[string]struct{}zu erstellen, um eindeutige Programmiersprachen zu speichern - Die Eingabezeichenfolge durch Aufteilen an den Kommas zu analysieren, um einzelne Sprachnamen zu erhalten
- Jede Sprache mithilfe des leeren Struktur-Literals
{}als Wert zu deinem Set hinzuzufügen - 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]"
- Wenn die Sprache neu im Set ist:
- Nach der Verarbeitung aller Sprachen eine Zusammenfassung anzuzeigen:
"Total languages processed: [total_count]""Unique languages: [unique_count]"
- Schließlich alle eindeutigen Sprachen im Set aufzulisten:
- Kopfzeile:
"Programming languages in set:" - Jede Sprache in einer eigenen Zeile:
"- [language]"
- Kopfzeile:
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
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und VerhaltenÜbe selbstständig: Online-Go-Compiler