Назад к вопросам
Senior
1
Как итерировать по ordered map с сохранением порядка? Реализация метода итерации.
Компании, где спрашивали
Cloud.ru
Ответ от нейросети
sobes.tech AI
В Go стандартная map не гарантирует порядок итерации. Чтобы итерировать по map с сохранением порядка, нужно использовать дополнительную структуру, например, срез ключей, который хранит порядок вставки.
Пример реализации ordered map с методом итерации:
package orderedmap
type OrderedMap struct {
keys []string
data map[string]interface{}
}
func NewOrderedMap() *OrderedMap {
return &OrderedMap{
keys: make([]string, 0),
data: make(map[string]interface{}),
}
}
func (om *OrderedMap) Set(key string, value interface{}) {
if _, exists := om.data[key]; !exists {
om.keys = append(om.keys, key)
}
om.data[key] = value
}
func (om *OrderedMap) Get(key string) (interface{}, bool) {
val, ok := om.data[key]
return val, ok
}
func (om *OrderedMap) Iterate(f func(key string, value interface{})) {
for _, key := range om.keys {
f(key, om.data[key])
}
}
Использование:
om := NewOrderedMap()
om.Set("first", 1)
om.Set("second", 2)
om.Iterate(func(k string, v interface{}) {
fmt.Println(k, v)
})
Таким образом, порядок ключей сохраняется в срезе, и при итерации мы проходим по ключам в нужном порядке.