Sobes.tech
Junior — Middle

Warum ist bei der Verwendung von map die Reihenfolge der Elemente nicht garantiert und erscheint zufällig?

sobes.tech KI

Antwort von AI

In Go wird die eingebaute Struktur map mit einer Hashtabelle implementiert, und die Reihenfolge der Elementdurchläufe ist nicht garantiert und kann sich zwischen Iterationen ändern. Dies liegt daran:

  • Die Hash-Funktion verteilt die Schlüssel auf Buckets, und die Reihenfolge der Buckets ist nicht festgelegt.
  • Zur Sicherheit und um Abhängigkeiten von der Reihenfolge zu vermeiden, wird ab Go 1.0 die Reihenfolge des Durchlaufens des Maps speziell bei jeder Iteration zufällig gemacht.

Daher erscheint die Reihenfolge der Elemente beim Durchlaufen eines Maps zufällig und sollte in der Programmlogik nicht verwendet werden. Wenn eine sortierte Ausgabe benötigt wird, sollten die Schlüssel separat sortiert werden:

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])
}

So erhalten Sie die Elemente in sortierter Reihenfolge.