Junior — Middle
Miért nem garantált az elemek sorrendje a map használatakor, és miért tűnik véletlenszerűnek?
sobes.tech MI
Válasz az MI-től
Go-ban a beépített map szerkezet hash-tábla segítségével van megvalósítva, és az elemek bejárási sorrendje nem garantált, és iterációk között változhat. Ennek oka:
- A hash-függvény elosztja a kulcsokat a vödörökbe, és a vödrök sorrendje nem fix.
- A biztonság és a sorrendtől való függőség elkerülése érdekében, a Go 1.0-tól kezdve, a map bejárási sorrendje kifejezetten véletlenszerűvé válik minden iteráció során.
Ezért, amikor map-et járunk be, az elemek sorrendje véletlenszerűnek tűnik, és nem szabad a program logikájában használni. Ha rendezett kimenetre van szükség, külön kell rendezni a kulcsokat:
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])
}
Így a rendezett sorrendben kapod meg az elemeket.