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.
Aufgabe
EinfachErstellen 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:
- Ein Set unter Verwendung des Go-Idioms
map[string]struct{}zu erstellen, um eindeutige Programmiersprachen zu speichern - Den Eingabestring zu parsen, indem Sie ihn an den Kommas aufteilen, um einzelne Sprachnamen zu erhalten
- Jede Sprache zu Ihrem Set hinzuzufügen, wobei das leere Struct-Literal
{}als Wert verwendet wird - 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]"
- 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:
- Header:
"Programming languages in set:" - Jede Sprache in einer separaten Zeile:
"- [language]"
- Header:
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
}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