Geordnete Iteration von Go-Maps: Ein umfassender Leitfaden
Das Iterieren durch eine Go-Map in der richtigen Reihenfolge kann aufgrund der Sprachkenntnisse der Sprache eine Herausforderung sein. Dabei liegt der Schwerpunkt eher auf der Parallelität als auf der Beibehaltung der Ordnung. In diesem Artikel werden zwei solide Methoden zum Erreichen einer geordneten Iteration untersucht und gleichzeitig die Vorteile der Verwendung von Karten beibehalten.
1. Beibehalten der Reihenfolge mit einem Schlüssel-Slice
Bei dieser Methode werden die Kartenschlüssel in einem separaten Slice verfolgt, um die Reihenfolge der Iteration sicherzustellen. Dieser Ansatz führt zwar einen Overhead ein, bietet aber Einfachheit und klare Implementierung.
Beispielimplementierung:
type Key int // Key type type Value int // Value type type Map struct { m map[Key]Value keys []Key } func New() *Map { return &Map{m: make(map[Key]Value)} } func (m *Map) Set(k Key, v Value) { if _, ok := m.m[k]; !ok { m.keys = append(m.keys, k) } m.m[k] = v } func (m *Map) Range() { for _, k := range m.keys { fmt.Println(m.m[k]) } }
2. Werte in einer LinkedList verknüpfen
Bei diesem Ansatz werden Werte in eine Struktur eingeschlossen, die den tatsächlichen Wert und einen Verweis auf den nächsten Schlüssel enthält. Es ermöglicht das effiziente Einfügen und Entfernen von Elementen.
Beispiel Implementierung:
type Key int // Key type type Value int // Value type type valueWrapper struct { value Value next *Key // Next key } type Map struct { m map[Key]valueWrapper first, last *Key } func New() *Map { return &Map{m: make(map[Key]valueWrapper)} } func (m *Map) Set(k Key, v Value) { if _, ok := m.m[k]; !ok && m.last != nil { w2 := m.m[*m.last] m.m[*m.last] = valueWrapper{w2.value, &k} } w := valueWrapper{value: v} m.m[k] = w if m.first == nil { m.first = &k } m.last = &k } func (m *Map) Range() { for k := m.first; k != nil; { w := m.m[*k] fmt.Println(w.value) k = w.next } }
Bonus:
Hier sind einige zusätzliche Tipps, die Sie berücksichtigen sollten:
Das obige ist der detaillierte Inhalt vonWie kann ich eine Go-Map in einer bestimmten Reihenfolge durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!