Middle
Kiek padidėja slice dydis naudojant funkciją append?
sobes.tech AI
Atsakymas iš AI
Slišo dydis gali didėti įvairiais būdais, priklausomai nuo dabartinio pajėgumo cap(slice):
- Jei pajėgumas nėra pakankamas: Naujas pajėgumas bus bent dvigubai didesnis už dabartinį, jei jis yra mažesnis nei 1024. Jei jis yra didesnis nei 1024, pajėgumas didės maždaug 25% nuo dabartinio, kol taps pakankamas. Tada jis gali būti pakoreguotas aukštyn.
- Jei pajėgumas yra pakankamas: Slišo dydis tiksliai padidės pagal pridėtus elementus, o pajėgumas nesikeis.
// Pavyzdys, kaip elgiasi append, kai nėra pakankamai pajėgumo
s := make([]int, 0, 0) // dydis 0, pajėgumas 0
s = append(s, 1) // dydis 1, pajėgumas 1. (0 -> 1)
s = append(s, 2) // dydis 2, pajėgumas 2. (1 -> 2)
s = append(s, 3) // dydis 3, pajėgumas 4. (2 -> 4)
s = append(s, 4) // dydis 4, pajėgumas 4
s = append(s, 5) // dydis 5, pajėgumas 8. (4 -> 8)
s2 := make([]int, 0, 1025) // dydis 0, pajėgumas 1025
s2 = append(s2, make([]int, 500)...) // dydis 500, pajėgumas 1025 (pakankamas)
s2 = append(s2, make([]int, 1000)...) // dydis 1500, maždaug 1025 + 1025*0.25 + epsilon
Konkreti pajėgumo didinimo algoritmas yra runtime viduje ir gali skirtis tarp Go versijų. Tačiau bendrosios taisyklės (dvigubinti iki 1024, po to didinti apie 25%) lieka galioti.