Sobes.tech
Junior

Glaubst du, dass Maps in Go sortiert sein werden?

sobes.tech KI

Antwort von AI

Standardmäßig garantiert die Iteration über eine Map in Go keine Reihenfolge der Elemente. Die Reihenfolge kann sich bei jedem Durchlauf ändern. Dies liegt daran, wie die internen Datenstrukturen für Maps implementiert sind, um eine hohe Leistung zu erzielen.

Es gibt jedoch mehrere Möglichkeiten, eine sortierte Durchlauf zu erreichen:

  1. Sortieren der Schlüssel: Alle Schlüssel der Map abrufen, sortieren und dann die Map mit den sortierten Schlüsseln durchlaufen.

    // Beispiel für das Sortieren von Schlüsseln
    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    func main() {
    	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) // Sortieren der Strings, es gibt auch sort.Ints usw.
    
    	for _, k := range keys {
    		fmt.Println(k, m[k])
    	}
    }
    
  2. Verwendung von Datenstrukturen, die Reihenfolge garantieren: Wenn die Reihenfolge kritisch ist, kann man andere Datenstrukturen anstelle von Maps verwenden oder eine eigene implementieren. Zum Beispiel eine Liste von Schlüssel-Wert-Paaren, die in sortiertem Zustand gehalten wird.

Auf diese Weise sind Standard-Maps in Go nicht sortiert, aber die Reihenfolge kann durch zusätzliche Operationen erreicht werden.