Junior
Ako funguje dátový typ Map v Go?
sobes.tech AI
Odpoveď od AI
Mapa — je neusporiadan súbor párov "kľúč-hodnota" v Go.
Vlastnosti:
- Kľúče musia byť porovnateľné dátové typy (čísla, reťazce, boolean, ukazovatele, kanály, rozhrania, ak je dynamický typ porovnateľný, a polia, ak sú ich prvky porovnateľné). Slices, funkcie a iné mapy nemôžu byť použité ako kľúče.
- Hodnoty môžu byť akéhokoľvek typu dát.
- Mapa je odkazový typ, čo znamená, že premenná typu map obsahuje ukazovateľ na dátovú štruktúru mapy v pamäti. Zmeny v mape cez jednu premennú budú viditeľné cez iné premenné, ktoré odkazujú na tú istú mapu.
- Nulová hodnota pre mapu je
nil. Donilmapy nie je možné zapisovať; pokus spôsobí panic. - Veľkosť mapy sa dynamicky mení pri pridávaní alebo odstraňovaní prvkov.
Vnútorná implementácia: Mapa v Go je implementovaná ako hash tabuľka (hash table). Každý kľúč je hashovaný a výsledok hashovania sa používa na určenie polohy priradenej hodnoty v tabuľke.
// Vytvorenie mapy
m := make(map[string]int)
// Pridanie prvkov
m["jeden"] = 1
m["dva"] = 2
// Získanie hodnoty
value, ok := m["jeden"] // value = 1, ok = true
value, ok = m["tri"] // value = 0 (nulová hodnota pre int), ok = false
// Odstránenie prvku
delete(m, "dva")
// Iterácia cez mapu (poradie nie je garantované)
for key, value := range m {
// ...
}
Porovnanie máp: Dve mapy sú považované za rovné iba ak odkazujú na rovnakú vnútornú štruktúru, t.j. map1 == map2 iba ak map1 a map2 sú tá istá premenná. Obsah mapy nie je možné porovnať operátorom ==. Na porovnanie obsahu je potrebné iterovať cez obe mapy a porovnať ich prvky.
Výkon: Operácie prístupu, pridávania a odstraňovania v mape majú priemernú zložitosť O(1). V najhoršom prípade (napríklad pri veľkom počte kolízií hashov) môžu trvať O(n) času.