Middle
append funktsiyasidan foydalanilganda slice o'lchami qanday o'sadi?
sobes.tech AI
AIdan javob
Slice kuch turli tarzda o'sha mumkin, hozirgi imkoniyat cap(slice) ga bog'liq:
- Agar imkoniyat yetarli bo'lmasa: Yangi imkoniyat kamida hozirgi imkoniyatning ikki barobariga teng bo'ladi, agar u 1024 dan kichik bo'lsa. Agar u 1024 dan katta bo'lsa, yangi imkoniyat hozirgi imkoniyatning taxminan 25% ga oshiriladi, to'g'ri bo'lguncha. Keyin uni yuqoriga sozlash mumkin.
- Agar imkoniyat yetarli bo'lsa: Slice o'lchami faqat qo'shilayotgan elementlar soniga teng bo'ladi, va imkoniyat o'zgarmaydi.
// Imkoniyat yetarli bo'lmagan holda append misoli
s := make([]int, 0, 0) // o'lcham 0, imkoniyat 0
s = append(s, 1) // o'lcham 1, imkoniyat 1. (0 -> 1)
s = append(s, 2) // o'lcham 2, imkoniyat 2. (1 -> 2)
s = append(s, 3) // o'lcham 3, imkoniyat 4. (2 -> 4)
s = append(s, 4) // o'lcham 4, imkoniyat 4
s = append(s, 5) // o'lcham 5, imkoniyat 8. (4 -> 8)
s2 := make([]int, 0, 1025) // o'lcham 0, imkoniyat 1025
s2 = append(s2, make([]int, 500)...) // o'lcham 500, imkoniyat 1025 (yetarli)
s2 = append(s2, make([]int, 1000)...) // o'lcham 1500, taxminan 1025 + 1025*0.25 + epsilon
Imkoniyatni oshirish uchun aniq algoritm runtime ichida joylashgan va Go versiyalariga qarab o'zgarishi mumkin. Biroq, umumiy qoidalar (1024 gacha ikki barobar oshirish, undan keyin taxminan 25% ga oshirish) saqlanib qoladi.