Junior — Middle
Jakie są ograniczenia i cechy korzystania z kluczy w strukturze danych map?
sobes.tech AI
Odpowiedź od AI
W Go, klucze w mapie muszą spełniać określone wymagania:
-
Klucz musi być porównywalny: Oznacza to, że typ klucza musi obsługiwać operacje porównania
==i!=. Na przykład typy podstawowe (int, string, bool), wskaźniki, struktury i tablice, jeśli wszystkie ich pola są porównywalne. -
Nie można używać jako kluczy slices, map i funkcji: Te typy nie są porównywalne i spowodują błąd kompilacji.
-
Cechy szczególne:
- Struktury mogą być kluczami, jeśli wszystkie ich pola są porównywalne.
- Jeśli struktura zawiera pole typu slice lub map, nie może być kluczem.
-
Wydajność: Używanie dużych struktur jako kluczy może być nieefektywne ze względu na kopiowanie.
Przykład:
m := make(map[string]int) // string jest prawidłowym kluczem
// Nieprawidłowy klucz:
// m2 := make(map[[]int]string) // błąd kompilacji
// Struktura z porównywalnymi polami:
type Point struct { X, Y int }
m3 := make(map[Point]string)
m3[Point{1,2}] = "A"
Dlatego przy wyborze klucza ważne jest, aby uwzględnić jego porównywalność i niezmienność.