Karten in Go bewahren die Ordnung – aber nicht so, wie Sie vielleicht denken
In Go sind Karten unsortierte Datenstrukturen. Dies bedeutet, dass die Reihenfolge der Schlüssel-Wert-Paare in einer Karte nicht garantiert konsistent ist. Dies kann ein Problem sein, wenn Sie eine Karte in einer bestimmten Reihenfolge durchlaufen müssen.
Bedenken Sie den folgenden Code:
package main import ( "fmt" ) func main() { months := map[int]string{ 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December", } for index, month := range months { fmt.Println(index, "-", month) } }
Wenn Sie diesen Code ausführen, können Sie mit der Ausgabe rechnen seien die Monate in der Reihenfolge von Januar bis Dezember. Dies ist jedoch nicht der Fall. Stattdessen werden Sie sehen, dass die Monate in einer scheinbar zufälligen Reihenfolge gedruckt werden.
Warum passiert das?
Der Grund dafür ist, dass die Schlüssel in einer Go-Karte unsortiert gespeichert sind Array. Wenn Sie über eine Karte iterieren, wird auf die Schlüssel in der Reihenfolge zugegriffen, in der sie im Array gespeichert sind.
Lösung
Es gibt verschiedene Möglichkeiten, diese zu erhalten rund um dieses Thema. Eine Möglichkeit besteht darin, ein Array zu verwenden, um die Schlüssel der Reihe nach zu speichern. Sie können dann über das Array iterieren, um in der gewünschten Reihenfolge auf die Elemente der Karte zuzugreifen.
Eine andere Möglichkeit, dieses Problem zu umgehen, ist die Verwendung einer sortierten Karte. Eine sortierte Karte ist eine Karte, die garantiert, dass die Schlüssel in sortierter Reihenfolge gespeichert werden. Dies kann nützlich sein, wenn Sie eine Karte in einer bestimmten Reihenfolge durchlaufen müssen.
Beispiel
Der folgende Code zeigt, wie ein Array zum Speichern der Schlüssel verwendet wird Reihenfolge:
package main import ( "fmt" "sort" ) func main() { months := map[int]string{ 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December", } keys := []int{} for key := range months { keys = append(keys, key) } sort.Ints(keys) for _, key := range keys { fmt.Println(key, "-", months[key]) } }
Wenn Sie diesen Code ausführen, werden Sie sehen, dass die Ausgabe die Monate in der Reihenfolge von Januar bis Dezember sind.
Das obige ist der detaillierte Inhalt vonWie kann ich eine geordnete Iteration über Go Maps garantieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!