Sprawdzanie przynależności
Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 34 z 68.
Teraz, gdy potrafisz dodawać elementy do zbioru, kolejną niezbędną operacją jest sprawdzanie, czy w zbiorze znajduje się określony element. Właśnie tutaj idiom Go „comma ok” staje się niezwykle przydatny.
Aby sprawdzić, czy element istnieje w twoim zbiorze, użyj tej samej składni co przy sprawdzaniu, czy klucz znajduje się w mapie:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}Podkreślenia _ używamy, ponieważ nie interesuje nas rzeczywista wartość (która zawsze jest pustą strukturą). Interesuje nas tylko zmienna logiczna ok, która informuje nas, czy klucz istnieje.
Możesz też użyć tego wzorca bezpośrednio w instrukcji if, aby uzyskać bardziej zwięzły kod:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}To sprawdzanie przynależności jest szybkie i wydajne, ponieważ wykorzystuje zoptymalizowaną implementację map w Go, zapewniając korzyści wydajnościowe prawdziwej struktury danych typu zbiór.
Wyzwanie
ŁatwyZbuduj system weryfikacji członków zespołu, który sprawdza, czy określone osoby należą do zespołu projektowego, używając idiomu zbioru w Go. To wyzwanie pokazuje, jak używać idiomu comma ok do sprawdzania przynależności do zbioru.
Otrzymasz dwa wejścia:
- Ciąg zawierający członków zespołu oddzielonych przecinkami (np.
"Alice,Bob,Charlie,Diana,Eve") - Ciąg zawierający osoby do sprawdzenia, oddzielone przecinkami (np.
"Bob,Frank,Alice,Grace,Charlie")
Twoim zadaniem jest:
- Utworzyć zbiór za pomocą idiomu Go
map[string]struct{}, aby przechowywać członków zespołu - Przetworzyć pierwszy ciąg wejściowy, dzieląc go po przecinkach, aby uzyskać poszczególne imiona członków zespołu
- Dodać każdego członka zespołu do zbioru, używając literału pustej struktury
{}jako wartości - Przetworzyć drugi ciąg wejściowy, dzieląc go po przecinkach, aby uzyskać listę osób do zweryfikowania
- Dla każdej osoby do sprawdzenia użyć idiomu comma ok
_, ok := teamSet[person], aby sprawdzić przynależność - Wyświetlić wyniki weryfikacji dla każdej sprawdzanej osoby:
- Jeśli dana osoba należy do zespołu:
"[person] is on the team" - Jeśli dana osoba nie należy do zespołu:
"[person] is not on the team"
- Jeśli dana osoba należy do zespołu:
- Po sprawdzeniu wszystkich osób wyświetlić podsumowanie:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Użyj pakietu strings, aby podzielić ciągi wejściowe po przecinkach. To wyzwanie pokazuje, jak idiom comma ok zapewnia bezpieczny i wydajny sposób sprawdzania przynależności do zbioru w Go, zwracając zarówno wartość, jak i wartość logiczną wskazującą, czy klucz istnieje.
Spróbuj swoich sił
package main
import (
"fmt"
"strings"
)
func main() {
// Wczytaj dane wejściowe
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Przetwórz ciągi wejściowe
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Napisz swój kod poniżej
// Utwórz zbiór przy użyciu map[string]struct{}
// Dodaj członków zespołu do zbioru
// Sprawdź każdą osobę, używając idiomu comma ok
// Wyświetl wyniki weryfikacji i podsumowanie
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowania6Idiomatyczny Go: zbiory
Idiom zbioru w GoTworzenie zbioruDodawanie elementów do zbioruSprawdzanie przynależnościUsuwanie elementów ze zbioruIterowanie po zbiorzePodsumowanie – unikalne nazwy użytkownikówPoćwicz samodzielnie: Kompilator Go online