Junior — Middle
Nima uchun mapni ishlatishda elementlar tartibi kafolatlanmaydi va tasodifiy ko'rinadi?
sobes.tech AI
AIdan javob
Go tilida, o qurilgan map tuzilmasi xesh-jadval yordamida amalga oshiriladi va elementlarni aylanib chiqish tartibi kafolatlanmagan va iteratsiyalar o‘rtasida o‘zgarishi mumkin. Bu shunday bo‘lishining sababi:
- Xesh-funksiya kalitlarni baketlarga taqsimlaydi, va baketlarning tartibi doimiy emas.
- Xavfsizlik va tartibga bog‘liqlikdan qochish uchun, Go 1.0 dan boshlab, map bo‘ylab aylanib chiqish tartibi maxsus ravishda har bir iteratsiyada tasodifiy tarzda o‘zgartiriladi.
Shuning uchun, map bo‘ylab aylanib chiqishda, elementlarning tartibi tasodifiy ko‘rinadi va dastur mantiqida ishlatilmasligi kerak. Agar tartiblangan chiqish kerak bo‘lsa, kalitlarni alohida saralash kerak:
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])
}
Shu tarzda, siz elementlarni saralangan tartibda olasiz.