Heim >Backend-Entwicklung >Golang >Wie kann ich eine Go-Map in der Einfügungsreihenfolge durchlaufen?
Iterieren von Karten in der Einfügereihenfolge
Go-Maps garantieren keine Iterationsreihenfolge, was es schwierig macht, Kartenelemente in der Reihenfolge abzurufen, in der sie eingefügt wurden . Um dieses Problem zu lösen, sollten Sie die folgenden Ansätze in Betracht ziehen:
Verwenden eines Keys-Slice
Behalten Sie ein separates Slice bei, um Schlüssel in der Einfügereihenfolge zu verfolgen. Wenn Sie der Karte ein Schlüssel-Wert-Paar hinzufügen, prüfen Sie, ob der Schlüssel im Slice vorhanden ist. Wenn nicht, fügen Sie es hinzu. Wenn Sie über die Karte iterieren, verwenden Sie das Schlüssel-Slice, um auf Elemente zuzugreifen.
type Map struct { m map[Key]Value keys []Key } 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]) } }
Verwenden eines Wert-Wrappers für verknüpfte Listen
Umschließen Sie Kartenwerte mit einer Datenstruktur, die speichert den Wert und einen Zeiger auf den nächsten Schlüssel in der Einfügereihenfolge. Wenn Sie ein Schlüssel-Wert-Paar hinzufügen, aktualisieren Sie den nächsten Zeiger des vorherigen Wert-Wrappers. Um in der Einfügereihenfolge zu iterieren, beginnen Sie mit dem ersten Schlüssel und folgen Sie den nächsten Hinweisen.
type valueWrapper struct { value Value next *Key } type Map struct { m map[Key]valueWrapper first, last *Key } 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.v, &k} } w := valueWrapper{v: 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.v) k = w.next } }
Diese Lösungen erfüllen die Notwendigkeit, die Einfügereihenfolge beizubehalten und gleichzeitig die Vorteile der Karte zu bewahren. Indem Sie die Schlüsselverfolgung von Kartenvorgängen trennen oder Werte der Reihe nach verknüpfen, können Sie Karten zuverlässig in der gewünschten Reihenfolge durchlaufen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Go-Map in der Einfügungsreihenfolge durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!