Sobes.tech
Junior

Hogyan működik a Map adattípus a Go-ban?

sobes.tech MI

Válasz az MI-től

A térkép — nem rendezett "kulcs-érték" párok gyűjteménye Go-ban.

Jellemzők:

  • A kulcsok összehasonlítható adattípusoknak kell, hogy legyenek (számok, sztringek, booleanok, mutatók, csatornák, interfészek, ha a dinamikus típus összehasonlítható, és tömbök, ha azok elemei összehasonlíthatók). Slices, függvények és más térképek nem használhatók kulcsként.
  • Az értékek bármilyen adattípusúak lehetnek.
  • A térkép referencia típus, ami azt jelenti, hogy egy map típusú változó mutatót tart a térkép adatszerkezetére a memóriában. A térkép módosítása egy változón keresztül más változók számára is látható lesz, amelyek ugyanarra a térképre hivatkoznak.
  • A térkép nullértéke nil. nil térképre írni nem lehet; a kísérlet pánikot okoz.
  • A térkép mérete dinamikusan változik, ahogy elemeket adunk hozzá vagy távolítunk el.

Belső megvalósítás: A Go-ban a térkép hash-tábla (hash table) formájában van megvalósítva. Minden kulcs hash-elésen megy keresztül, és a hash eredményét használják a hozzárendelt érték helyének meghatározására a táblában.

// Térkép létrehozása
m := make(map[string]int)

// Elemek hozzáadása
m["egy"] = 1
m["kettő"] = 2

// Érték lekérése
value, ok := m["egy"] // value = 1, ok = true
value, ok = m["három"]  // value = 0 (nullérték az int típusnál), ok = false

// Elem törlése
delete(m, "kettő")

// Iterálás a térképen (a sorrend nem garantált)
for key, value := range m {
	// ...
}

Térképek összehasonlítása: Két térkép csak akkor tekinthető egyenlőnek, ha ugyanarra a belső struktúrára hivatkoznak, azaz, map1 == map2 csak akkor, ha map1 és map2 ugyanaz a változó. A térkép tartalmának összehasonlítása nem engedélyezett == operátorral. A tartalom összehasonlításához mindkét térképen végig kell menni és össze kell hasonlítani az elemeket.

Teljesítmény: A hozzáférési, hozzáadási és törlési műveletek átlagosan O(1) időkomplexitásúak. A legrosszabb esetben (pl. sok hash ütközés esetén) O(n) időt vehetnek igénybe.