Prüfen auf Mitgliedschaft
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 34 von 68.
Nachdem du nun Elemente zu deinem Set hinzufügen kannst, besteht der nächste wichtige Vorgang darin zu prüfen, ob ein bestimmtes Element im Set vorhanden ist. Hier erweist sich GOs „comma ok“-Idiom als äußerst nützlich.
Um zu prüfen, ob ein Element in deinem Set vorhanden ist, verwendest du dieselbe Syntax wie beim Prüfen, ob ein Schlüssel in einer Map vorhanden ist:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}Der Unterstrich _ wird verwendet, weil uns der tatsächliche Wert (der immer eine leere Struktur ist) nicht interessiert. Uns interessiert nur die boolesche Variable ok, die uns mitteilt, ob der Schlüssel vorhanden ist.
Du kannst dieses Muster auch direkt in einer if-Anweisung verwenden, um kompakteren Code zu schreiben:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Diese Mitgliedschaftsprüfung ist schnell und effizient und nutzt die optimierte map-Implementierung von Go, um dir die Leistungsvorteile einer echten Mengen-Datenstruktur zu bieten.
Aufgabe
EinfachErstelle ein Verifizierungssystem für Teammitglieder, das mithilfe des Go-Set-Idioms prüft, ob bestimmte Personen zu einem Projektteam gehören. Diese Herausforderung zeigt, wie du das Komma-ok-Idiom verwenden kannst, um die Zugehörigkeit zu einem Set zu testen.
Du erhältst zwei Eingaben:
- Eine Zeichenkette mit durch Kommas getrennten Teammitgliedern (z. B.
"Alice,Bob,Charlie,Diana,Eve") - Eine Zeichenkette mit durch Kommas getrennten Personen, die überprüft werden sollen (z. B.
"Bob,Frank,Alice,Grace,Charlie")
Deine Aufgabe ist es:
- Ein Set mit dem Go-Idiom
map[string]struct{}zu erstellen, um die Teammitglieder zu speichern - Die erste Eingabezeichenkette durch Aufteilen an den Kommas zu verarbeiten, um die einzelnen Namen der Teammitglieder zu erhalten
- Jedes Teammitglied mithilfe des leeren Struct-Literals
{}als Wert zu deinem Set hinzuzufügen - Die zweite Eingabezeichenkette durch Aufteilen an den Kommas zu verarbeiten, um die Liste der zu überprüfenden Personen zu erhalten
- Für jede zu überprüfende Person das Komma-ok-Idiom
_, ok := teamSet[person]zu verwenden, um die Zugehörigkeit zu testen - Die Überprüfungsergebnisse für jede überprüfte Person anzuzeigen:
- Wenn die Person zum Team gehört:
"[person] is on the team" - Wenn die Person nicht zum Team gehört:
"[person] is not on the team"
- Wenn die Person zum Team gehört:
- Nachdem alle Personen überprüft wurden, eine Zusammenfassung anzuzeigen:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Verwende das Paket strings, um die Eingabezeichenketten an den Kommas aufzuteilen. Diese Herausforderung zeigt, wie das Komma-ok-Idiom eine sichere und effiziente Möglichkeit bietet, die Zugehörigkeit zu einem Go-Set zu überprüfen, indem es sowohl den Wert als auch einen booleschen Wert zurückgibt, der angibt, ob der Schlüssel vorhanden ist.
Probier es selbst
package main
import (
"fmt"
"strings"
)
func main() {
// Eingabe lesen
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Eingabezeichenketten parsen
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Schreibe deinen Code darunter
// Erstelle ein Set mit map[string]struct{}
// Füge Teammitglieder zum Set hinzu
// Überprüfe jede Person mit dem Komma-ok-Idiom
// Zeige Verifizierungsergebnisse und Zusammenfassung an
}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 Verhalten6Idiomatisches Go: Sets
Das Set-Idiom in GoEin Set erstellenElemente zu einem Set hinzufügenPrüfen auf MitgliedschaftAus einem Set entfernenÜber ein Set iterierenZusammenfassung – Eindeutige BenutzernamenÜbe selbstständig: Online-Go-Compiler