Junior — Middle
Prečo pri použití map nie je zaručený poradie prvkov a zdá sa, že je náhodné?
sobes.tech AI
Odpoveď od AI
V Go je vstavaná štruktúra map implementovaná pomocou hash tabuľky a poradie prechodu prvkov nie je garantované a môže sa meniť medzi iteráciami. To je spôsobené tým, že:
- Hash funkcia rozdeľuje kľúče do vedier, a poradie vedier nie je pevné.
- Pre bezpečnosť a na zabránenie závislosti od poradia, od Go 1.0, je poradie prechodu mapou špeciálne náhodne zmenené pri každej iterácii.
Preto pri prechádzaní mapou sa poradie prvkov zdá byť náhodné a nemalo by sa používať v logike programu. Ak je potrebný zoradený výstup, je potrebné zvlášť zoradiť kľúče:
m := map[string]int{"b": 2, "a": 1, "c": 3}
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
Týmto spôsobom získate prvky v zoradenom poradí.