Manote, kad Go kalboje žemėlapiai (map) bus išrikiuoti?
sobes.tech AI
Atsakymas iš AI
Pagal numatytuosius nustatymus, kartojant per mapą Go kalboje, nėra garantuojamas elementų tvarkos. Tvarka gali keistis kiekvieno perėjimo metu. Tai susiję su tuo, kaip įgyvendintos vidinės duomenų struktūros mapai, siekiant pasiekti aukštą našumą.
Tačiau yra keletas būdų gauti tvarkingą perėjimą:
-
Raktų rūšiavimas: Gauti visus mapo raktus, juos surūšiuoti ir tada peržiūrėti mapą naudodami surūšiuotus raktus.
// Raktų rūšiavimo pavyzdys package main import ( "fmt" "sort" ) func main() { m := map[string]int{ "b": 2, "a": 1, "c": 3, } keys := make([]string, 0, len(m)) for k := range m { keys = append(keys, k) } sort.Strings(keys) // Rūšiuoti eilutes, taip pat yra sort.Ints ir kt. for _, k := range keys { fmt.Println(k, m[k]) } } -
Naudoti duomenų struktūras, garantuojančias tvarką: Jei tvarka yra kritiška, galima naudoti kitas duomenų struktūras vietoj mapų arba įgyvendinti savo. Pavyzdžiui, sąrašą porų raktas-reikšmė, kuris palaikomas surūšiuotame stovyje.
Taip, standartiniai mapai Go nėra surūšiuoti, tačiau tvarką galima pasiekti naudojant papildomas operacijas.