Junior — Middle
Proč není při použití map zaručen pořadí prvků a zdá se být náhodné?
sobes.tech AI
Odpověď od AI
V Go je vestavěná struktura map implementována pomocí hash tabulky a pořadí průchodu prvky není garantováno a může se měnit mezi iteracemi. To je způsobeno tím, že:
- Hash funkce rozděluje klíče do košů a pořadí košů není pevné.
- Pro bezpečnost a zabránění závislosti na pořadí je od Go 1.0 specificky náhodně měněn pořadí průchodu mapou při každé iteraci.
Proto při průchodu mapou se pořadí prvků zdá být náhodné a nemělo by být používáno v logice programu. Pokud je potřeba seřazený výstup, je třeba klíče zvlášť seřadit:
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 způsobem získáte prvky ve seřazeném pořadí.