Sobes.tech
Junior

Kuidas töötab Map andmetüüp Go-s?

sobes.tech AI

Vastus AI-lt

Kaart — see on mittetellitav kogumik "võtme-väärtuse" paaridest Go keeles.

Omadused:

  • Võtmed peavad olema võrdluskõlblikud andmetüübid (arvud, stringid, boolid, näidikud, kanalid, liidesed, kui dünaamiline tüüp on võrdluskõlblik, ja massiivid, kui nende elemendid on võrdluskõlblikud). Sliced, funktsioonid ja teised kaardid ei tohi olla võtmeks.
  • Väärtused võivad olla mis tahes tüüpi.
  • Map on viidetüüp, mis tähendab, et map-tüüpi muutuja sisaldab viidet map-i andmestruktuurile mälus. Muutused ühe muutuja kaudu on nähtavad ka teistes, mis viitavad samale map-ile.
  • Map-i nullväärtus on nil. nil map-i ei saa kirjutada, kirjutamiskatse põhjustab panni.
  • Mapi suurus muutub dünaamiliselt, kui elemente lisatakse või eemaldatakse.

Sisemine teostus: Map Go keeles on teostatud nagu hajutustabel (hash table). Iga võti hashitakse ja hash-tulemust kasutatakse selleks, et määrata, kus tabelis on seotud väärtus.

// Mapi loomine
m := make(map[string]int)

// Elementide lisamine
m["üks"] = 1
m["kaks"] = 2

// Väärtuse saamine
value, ok := m["üks"] // value = 1, ok = tõene
value, ok = m["kolm"]  // value = 0 (int nullväärtus), ok = vale

// Elementi kustutamine
delete(m, "kaks")

// Mapi iteratsioon (järjekord ei ole garanteeritud)
for key, value := range m {
	// ...
}

Mapide võrdlemine: Kaks map-i loetakse võrdseteks ainult siis, kui nad viitavad samale sisemisele struktuurile, st. map1 == map2 ainult siis, kui map1 ja map2 on sama muutuja. Mapi sisu ei saa võrrelda operaatoriga ==. Sisu võrdlemiseks tuleb mõlemad map-id läbi käia ja nende elemente võrrelda.

Tõhusus: Juurdepääs, lisamine ja kustutamine map-is toimub keskmiselt O(1) aja jooksul. Halvimal juhul (näiteks suure kolitsiooni korral) võivad need võtta O(n) aega.