Sobes.tech
Junior — Middle

რატომ არის map-ის გამოყენებისას ელემენტების სია გარანტირებული არაა და შემთხვევით ჩანს?

sobes.tech AI

პასუხი AI-სგან

Go-ში, ინტეგრირებული მეპის სტრუქტურა განხორციელებულია ჰეშ-ცხრილის გამოყენებით, და ელემენტების გადახედვის სია არ არის გარანტირებული და შეიძლება შეიცვალოს განმეორებითი გადახედვების შორის. ამის მიზეზი არის:

  • ჰეშ-ფუნქცია განაწილებს გასაღებს ბაკეტებში, და ბაკეტების სია არ არის ფიქსირებული.
  • უსაფრთხოებისა და სია-დამოკიდებულების თავიდან აცილების მიზნით, 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])
}

ასე, თქვენ მიიღებთ ელემენტებს სორტირებულ სია-დალაგებულად.