Sobes.tech
Junior — Middle

Ինչու՞ map- ի օգտագործման ժամանակ տարրերի կարգը չի երաշխավորվում և թվում է պատահական։

sobes.tech AI

Պատասխան AI-ից

Go-ում տեղադրված map կառուցվածքը իրականացնում է հեշ-թերթի միջոցով, և տարրերի շրջայցի կարգը երաշխավորված չէ և կարող է փոխվել կրկնակի շրջայցերի միջև։ Դա կապված է այն բանի հետ,

  • Հեշ-ֆունկցիան տարածում է բանալիները բաքերում, և բաքերի կարգը հաստատված չէ։
  • Անվտանգության և կարգի կախվածությունից խուսափելու համար, Go 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])
}

Այսպիսով, դուք կստանաք տարրերը կարգավորված կարգով։