Sobes.tech
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. Do nil mapy 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.