0Pricing
Go Academy · Lektion

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 range ist 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

  1. Map-Interna
  2. Existenz prüfen
  3. Maps als Sets
  4. Iteration und Reihenfolge
← Zurück zu Go Academy