Junior
Jak funguje datový typ Map v Go?
sobes.tech AI
Odpověď od AI
Mapa — je nespořádaná kolekce párů "klíč-hodnota" v Go.
Vlastnosti:
- Klíče musí být porovnatelné datové typy (čísla, řetězce, boolean, ukazatele, kanály, rozhraní, pokud je dynamický typ porovnatelný, a pole, pokud jsou jejich prvky porovnatelné). Slices, funkce a jiné mapy nelze použít jako klíče.
- Hodnoty mohou být jakéhokoliv datového typu.
- Map je odkazový typ, což znamená, že proměnná typu map obsahuje ukazatel na datovou strukturu mapy v paměti. Změny v mapě provedené přes jednu proměnnou budou viditelné přes jiné proměnné odkazující na stejnou mapu.
- Nulová hodnota pro mapu je
nil. Donilmapy nelze zapisovat; pokus o to způsobí paniku. - Velikost mapy se dynamicky mění při přidávání nebo odstraňování prvků.
Vnitřní implementace: Map v Go je implementována jako hash tabulka (hash table). Každý klíč je hashován a výsledek hashování se používá k určení polohy přiřazené hodnoty v tabulce.
// Vytvoření mapy
m := make(map[string]int)
// Přidání prvků
m["jeden"] = 1
m["dva"] = 2
// Získání hodnoty
value, ok := m["jeden"] // value = 1, ok = true
value, ok = m["tři"] // value = 0 (nulová hodnota pro int), ok = false
// Odstranění prvku
delete(m, "dva")
// Iterace přes mapu (pořadí není garantováno)
for key, value := range m {
// ...
}
Porovnání map: Dvě mapy jsou považovány za rovné pouze pokud odkazují na stejnou vnitřní strukturu, tj. map1 == map2 pouze pokud map1 a map2 jsou stejná proměnná. Obsah mapy nelze porovnat operátorem ==. Pro porovnání obsahu je třeba iterovat přes obě mapy a porovnat jejich prvky.
Výkon: Operace přístupu, přidání a odstranění v mapě mají průměrnou složitost O(1). V nejhorším případě (například při velkém počtu kolizí hashů) mohou trvat O(n) času.