Prüfen auf Mitgliedschaft
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 34 von 68.
Nachdem Sie nun Elemente zu Ihrem Set hinzufügen können, ist die nächste wesentliche Operation die Überprüfung, ob ein bestimmtes Element im Set vorhanden ist. Hier erweist sich das „comma ok“-Idiom von Go als äußerst nützlich.
Um zu prüfen, ob ein Element in Ihrem Set vorhanden ist, verwenden Sie dieselbe Syntax wie beim Prüfen auf einen Schlüssel in einer Map:
_, 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, da uns der eigentliche Wert egal ist (der immer ein leerer Struct ist). Uns interessiert nur die boolesche ok-Variable, die uns sagt, ob der Schlüssel existiert.
Sie können dieses Muster auch direkt in einer if-Anweisung verwenden, um den Code prägnanter zu gestalten:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Diese Prüfung auf Mitgliedschaft ist schnell und effizient und nutzt die optimierte Map-Implementierung von Go, um Ihnen die Leistungsvorteile einer echten Set-Datenstruktur zu bieten.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachErstellen Sie ein Verifizierungssystem für Teammitglieder, das mithilfe des Go-Set-Idioms prüft, ob bestimmte Personen Teil eines Projektteams sind. Diese Herausforderung zeigt, wie man das Comma-ok-Idiom verwendet, um die Mitgliedschaft in einem Set zu testen.
Sie erhalten zwei Eingaben:
- Einen String, der Teammitglieder enthält, getrennt durch Kommas (z. B.
"Alice,Bob,Charlie,Diana,Eve") - Einen String, der zu prüfende Personen enthält, getrennt durch Kommas (z. B.
"Bob,Frank,Alice,Grace,Charlie")
Ihre Aufgabe ist es:
- Erstellen Sie ein Set unter Verwendung des Go-Idioms
map[string]struct{}, um die Teammitglieder zu speichern - Parsen Sie den ersten Eingabestring, indem Sie ihn an den Kommas aufteilen, um die Namen der einzelnen Teammitglieder zu erhalten
- Fügen Sie jedes Teammitglied zu Ihrem Set hinzu, wobei Sie das leere Struct-Literal
{}als Wert verwenden - Parsen Sie den zweiten Eingabestring, indem Sie ihn an den Kommas aufteilen, um die Liste der zu verifizierenden Personen zu erhalten
- Verwenden Sie für jede zu prüfende Person das Comma-ok-Idiom
_, ok := teamSet[person], um die Mitgliedschaft zu testen - Zeigen Sie die Verifizierungsergebnisse für jede geprüfte Person an:
- Wenn die Person im Team ist:
"[person] is on the team" - Wenn die Person nicht im Team ist:
"[person] is not on the team"
- Wenn die Person im Team ist:
- Zeigen Sie nach der Überprüfung aller Personen eine Zusammenfassung an:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Verwenden Sie das strings-Paket, um die Eingabestrings an den Kommas aufzuteilen. Diese Herausforderung zeigt, wie das Comma-ok-Idiom eine sichere und effiziente Methode bietet, um die Mitgliedschaft in einem Go-Set zu prüfen, indem sowohl der Wert als auch ein Boolean zurückgegeben werden, der angibt, ob der Schlüssel existiert.
Spickzettel
Um zu prüfen, ob ein Element in einem Set (Map) existiert, verwenden Sie das „comma ok“-Idiom:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}Der Unterstrich _ verwirft den Wert, da uns nur die boolesche Variable ok interessiert, die angibt, ob der Schlüssel existiert.
Sie können dieses Muster auch direkt in einer if-Anweisung verwenden:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Probier es selbst
package main
import (
"fmt"
"strings"
)
func main() {
// Eingabe lesen
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Eingabe-Strings parsen
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Schreiben Sie Ihren Code unten
// Erstellen Sie ein Set mit map[string]struct{}
// Teammitglieder zum Set hinzufügen
// Jede Person mit dem Comma-Ok-Idiom prüfen
// Verifizierungsergebnisse und Zusammenfassung anzeigen
}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