Sobes.tech
Junior

Kā darbojas Map datu tips Go?

sobes.tech AI

Atbilde no AI

Kartē — tas ir neordinēta pāru "atslēga-vērtība" kolekcija Go valodā.

Īpatnības:

  • Atslēgas ir jābūt salīdzināmiem datu tipiem (skaitļi, virknes, loģiskie, norādītāji, kanāli, saskarnes, ja dinamiskais tips ir salīdzināms, un masīvi, ja to elementi ir salīdzināmi). Sēkļi, funkcijas un citi kartes nevar tikt izmantoti kā atslēgas.
  • Vērtības var būt jebkura tipa.
  • Karte ir atsauces tips, tas nozīmē, ka kartes tipa mainīgais satur norādi uz kartes datu struktūru atmiņā. Izmaiņas caur vienu mainīgo būs redzamas arī citos, kas atsaucas uz to pašu karti.
  • Nulle vērtība kartei ir nil. nil karti nevar rakstīt, mēģinājums rakstīt izraisīs paniku.
  • Karte dinamiski mainās, pievienojot vai izņemot elementus.

Iekšējā realizācija: Karte Go valodā ir realizēta kā haštabula. Katrs atslēgs tiek hašēts, un haša rezultāts tiek izmantots, lai noteiktu, kurā tabulas vietā ir saistītā vērtība.

// Karte izveide
m := make(map[string]int)

// Elementu pievienošana
m["viens"] = 1
m["divi"] = 2

// Vērtības iegūšana
value, ok := m["viens"] // value = 1, ok = patiesi
value, ok = m["trīs"]  // value = 0 (int tipa nulle), ok = nepatiesi

// Elementa dzēšana
delete(m, "divi")

// Karte pa ciklam (nav garantēts kārtības)
for key, value := range m {
	// ...
}

Kartu salīdzināšana: Divas kartes tiek uzskatītas par vienādām, ja tās norāda uz to pašu iekšējo struktūru, t.i., map1 == map2 tikai tad, ja map1 un map2 ir tas pats mainīgais. Karte saturu nevar salīdzināt ar operatoru ==. Lai salīdzinātu saturu, ir jāiziet cauri abām kartēm un jāsalīdzina to elementi.

Veiktspēja: Piekļuve, pievienošana un dzēšana kartē vidēji ir O(1). Sliktākajos gadījumos (piemēram, ar lielu kolīziju skaitu) tās var aizņemt O(n) laiku.