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.nilté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.