Iteration und Reihenfolge
Mit der zufälligen Map-Reihenfolge umgehen
Iteration und Reihenfolge ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Eine Map durchlaufen
Verwenden Sie range, um eine Map zu durchlaufen und dabei jeden Schlüssel und Wert zu erhalten.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {
fmt.Println(k, v)
}
}Die Reihenfolge ist zufällig
Die Reihenfolge beim Durchlaufen einer Map ist nicht garantiert. Go randomisiert sie absichtlich. Wenn Sie dieselbe Schleife zweimal ausführen, werden die Schlüssel möglicherweise in unterschiedlichen Reihenfolgen ausgegeben.
Warum die Reihenfolge zufällig ist
Go randomisiert die Reihenfolge absichtlich, damit Entwickler nicht versehentlich von einer bestimmten Reihenfolge abhängen. Code, der von der Reihenfolge einer Map abhängt, ist ein Fehler, der nur darauf wartet, entdeckt zu werden.
Nur Schlüssel
Lassen Sie den Wert weg, um nur die Schlüssel zu durchlaufen.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
fmt.Println(k)
}
}Schlüssel sammeln
Um ein stabiles Ergebnis zu erhalten, sammeln Sie die Schlüssel zunächst in einem Slice.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
fmt.Println("collected", len(keys), "keys")
}Schlüssel sortieren
Sortieren Sie die gesammelten Schlüssel und durchlaufen Sie anschließend den Slice. Dadurch erhalten Sie eine deterministische, geordnete Ausgabe.
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{"c": 3, "a": 1, "b": 2}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
}Muster für eine geordnete Ausgabe
Das Muster „sammeln und anschließend sortieren“ ist die übliche Methode, eine Map in einer vorhersehbaren Reihenfolge auszugeben. Sortieren Sie die Schlüssel immer, wenn die Ausgabereihenfolge wichtig ist.
Ganzzahlige Schlüssel sortieren
Dasselbe Prinzip funktioniert mit numerischen Schlüsseln und sort.Ints.
package main
import (
"fmt"
"sort"
)
func main() {
m := map[int]string{3: "c", 1: "a", 2: "b"}
keys := []int{}
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
}Während des Durchlaufens ändern
Sie dürfen während einer range-Schleife sicher Schlüssel löschen. Das Hinzufügen von Schlüsseln während des Durchlaufens hat jedoch ein undefiniertes Verhalten; die neuen Einträge erscheinen möglicherweise oder möglicherweise nicht.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
if k == "b" {
delete(m, k)
}
}
fmt.Println(len(m))
}Nach Wert sortieren
Um nach dem Wert statt nach dem Schlüssel zu sortieren, sammeln Sie die Schlüssel und sortieren Sie sie anschließend mit einem Vergleich, der die Werte aus der Map liest.
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{"a": 3, "b": 1, "c": 2}
keys := []string{}
for k := range m {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool {
return m[keys[i]] < m[keys[j]]
})
for _, k := range keys {
fmt.Println(k, m[k])
}
}Verlassen Sie sich niemals auf die Reihenfolge
Die wichtigste Erkenntnis: Gehen Sie niemals von einer bestimmten Reihenfolge beim Durchlaufen einer Map aus. Wenn die Reihenfolge wichtig ist, extrahieren Sie die Schlüssel in einen Slice und sortieren Sie sie ausdrücklich.
Kurztest
Sie müssen die Einträge einer Map in alphabetischer Reihenfolge der Schlüssel ausgeben. Wie gehen Sie korrekt vor?
Zusammenfassung
Durchlaufen und Sortieren:
- Die Reihenfolge bei
rangeüber eine Map ist absichtlich zufällig - Sammeln Sie die Schlüssel, sortieren Sie sie und durchlaufen Sie sie anschließend für eine deterministische Ausgabe
- Löschen während
rangeist sicher; Hinzufügen ist undefiniert
Häufig gestellte Fragen
Ist die Lektion „Iteration und Reihenfolge“ kostenlos?
Ja — der vollständige Text von „Iteration und Reihenfolge“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Iteration und Reihenfolge“?
Mit der zufälligen Map-Reihenfolge umgehen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Iteration und Reihenfolge“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Map-Interna
- Existenz prüfen
- Maps als Sets
- Iteration und Reihenfolge