Назад к вопросам
Senior
4
Как реализовать упорядоченную map (ordered map) в Go, которая гарантирует порядок ключей при итерации?
Компании, где спрашивали
Cloud.ru
Ответ от нейросети
sobes.tech AI
В Go стандартная map не гарантирует порядок итерации, так как она реализована как хеш-таблица. Чтобы реализовать упорядоченную map, можно использовать структуру, которая хранит ключи в срезе в нужном порядке и сопоставляет их значения в map. При итерации сначала проходить по срезу ключей, а затем получать значения из map.
Пример реализации упорядоченной map:
package main
import "fmt"
type OrderedMap struct {
keys []string
data map[string]int
}
func NewOrderedMap() *OrderedMap {
return &OrderedMap{
keys: []string{},
data: make(map[string]int),
}
}
func (om *OrderedMap) Set(key string, value int) {
if _, exists := om.data[key]; !exists {
om.keys = append(om.keys, key)
}
om.data[key] = value
}
func (om *OrderedMap) Get(key string) (int, bool) {
val, ok := om.data[key]
return val, ok
}
func (om *OrderedMap) Keys() []string {
return om.keys
}
func main() {
om := NewOrderedMap()
om.Set("apple", 5)
om.Set("banana", 3)
om.Set("cherry", 7)
for _, key := range om.Keys() {
val, _ := om.Get(key)
fmt.Printf("%s: %d\n", key, val)
}
}
Такой подход гарантирует сохранение порядка вставки ключей при итерации.