Sobes.tech
Junior — Middle

Чаро дар истифодаи харита тартиби унсурҳо кафолат дода намешавад ва ба назар мерасад, ки тасодуфӣ аст?

sobes.tech AI

Ҷавоб аз AI

Дар Го, структурата map е реализирана с помощта на хеш таблица, и редът на обхождане на елементите не е гарантиран и може да се променя между итерациите. Това се дължи на:

  • Хеш-функцията разпределя ключовете по кофи, и редът на кофите не е фиксиран.
  • За сигурност и за предотвратяване на зависимост от реда, от Го 1.0 нататък, редът на обхождане на map е специално рандомизиран при всяка итерация.

Затова при обхождане на map, редът на елементите изглежда случаен и не трябва да се използва в логиката на програмата. Ако е необходима сортирана изход, трябва отделно да се сортират ключовете:

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)
for _, k := range keys {
    fmt.Println(k, m[k])
}

Така ще получите елементите в сортиран ред.