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)
}
}
Мұндай тәсіл енгізу тәртібін сақтау кепілдігін береді.