Heim >Backend-Entwicklung >Golang >Warum ist die Go Map Iteration ungeordnet und wie kann ich die Reihenfolge garantieren?
Go-Kartendruck außer Betrieb
In Go werden Karten mithilfe einer Hash-Tabelle implementiert, die Schlüssel-Wert-Paare in einem nicht verwalteten Zustand verwaltet -geordnete Mode. Daher garantiert die Iteration über eine Karte nicht die Reihenfolge, in der Schlüssel oder Werte zurückgegeben werden.
Warum ist der Kartendruck nicht in der richtigen Reihenfolge?
In Mit dem bereitgestellten Code werden die Kartenmonate mit Schlüssel-Wert-Paaren definiert, die die Monatsnummern und die entsprechenden Namen darstellen. Beim Durchlaufen der Karte mithilfe eines Bereichs basiert die Reihenfolge der gedruckten Ausgabe auf der internen Implementierung der Hash-Tabelle, die normalerweise eher auf Leistung als auf Reihenfolge optimiert ist.
So korrigieren Sie die Reihenfolge
Es gibt mehrere Ansätze, um die Reihenfolge der Karteniteration sicherzustellen:
1. Verwenden Sie eine geordnete Karte:
Go verfügt nicht über einen integrierten geordneten Kartentyp, aber es gibt Bibliotheken von Drittanbietern, die diese Funktionalität bereitstellen. Eine solche Bibliothek ist „github.com/golang/collections#OrderedMap“.
import "github.com/golang/collections#OrderedMap" func main() { m := collections.NewOrderedMap() m.Set(1, "January") // ... for _, month := range m.Keys() { fmt.Println(month, "-", m.Get(month)) } }
2. Sortieren Sie die Kartenschlüssel:
Eine andere Möglichkeit besteht darin, die Schlüssel aus der Karte abzurufen, sie zu sortieren und dann über die sortierten Schlüssel zu iterieren, um der Reihe nach auf die Werte zuzugreifen.
func main() { keys := make([]int, 0, len(months)) for k := range months { keys = append(keys, k) } sort.Ints(keys) for _, k := range keys { fmt.Println(k, "-", months[k]) } }
Das obige ist der detaillierte Inhalt vonWarum ist die Go Map Iteration ungeordnet und wie kann ich die Reihenfolge garantieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!