Cum funcționează tipul de date Map în Go?
sobes.tech AI
Răspuns de la AI
Map — o este o colecție nesortată de perechi "cheie-valoare" în Go.
Caracteristici:
- Cheile trebuie să fie tipuri de date comparabile (numere, șiruri, valori booleene, pointeri, canale, interfețe, dacă tipul dinamic este comparabil, și array-uri dacă elementele lor sunt comparabile). Slices, funcții și alte maps nu pot fi folosite ca chei.
- Valorile pot fi de orice tip de date.
- Map este un tip de referință, ceea ce înseamnă că o variabilă de tip map conține un pointer către structura de date map în memorie. Modificările aduse map-ului printr-o variabilă vor fi vizibile și prin alte variabile care fac referire la același map.
- Valoarea nulă pentru map este
nil. Nu se poate scrie într-un mapnil; încercarea va provoca un panic. - Dimensiunea map-ului se schimbă dinamic pe măsură ce se adaugă sau se elimină elemente.
Implementare internă: Map în Go este implementat ca un tabel de dispersie (hash table). Fiecare cheie este hash-ată, iar rezultatul hash-ului este folosit pentru a determina poziția valorii asociate în tabel.
// Creare map
m := make(map[string]int)
// Adăugare elemente
m["unu"] = 1
m["doi"] = 2
// Obținere valoare
value, ok := m["unu"] // value = 1, ok = true
value, ok = m["trei"] // value = 0 (valoare zero pentru int), ok = false
// Ștergere element
delete(m, "doi")
// Iterare pe map (ordinea nu este garantată)
for key, value := range m {
// ...
}
Compararea mapurilor: Două mapuri sunt considerate egale doar dacă fac referire la aceeași structură internă, adică, map1 == map2 doar dacă map1 și map2 sunt aceeași variabilă. Compararea conținutului unui map cu == nu este permisă. Pentru a compara conținutul, trebuie să iterezi peste ambele mapuri și să compari elementele lor.
Performanță: Operațiile de acces, adăugare și ștergere în map au, în medie, complexitatea O(1). În cel mai rău caz (de exemplu, cu multe coliziuni de hash), pot dura O(n) timp.