Sobes.tech
Senior
40

Go тілінде итеру кезінде кілттердің тәртібін қамтамасыз ететін реттелген картаны (ordered map) қалай жүзеге асыруға болады?

Сұралған компаниялар
Cloud.ru

AI-дан жауап

sobes.tech AI

Go тілінде стандартты карта (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)
    }
}

Мұндай тәсіл енгізу тәртібін сақтау кепілдігін береді.