Middle
Cik lielu palielinās slices izmērs, izmantojot funkciju append?
sobes.tech AI
Atbilde no AI
Slice izmērs var pieaugēt dažādos veidos, atkarībā no pašreizējās ietilpības cap(slice):
- Ja ietilpība nav pietiekama: Jaunā ietilpība būs vismaz divreiz lielāka par pašreizējo, ja tā ir mazāka par 1024. Ja tā ir lielāka par 1024, ietilpība palielināsies aptuveni par 25% no pašreizējās, līdz tā kļūst pietiekama. Tad tā var tikt pielāgota uz augšu.
- Ja ietilpība ir pietiekama: Slice garums precīzi palielināsies par pievienoto elementu skaitu, un ietilpība nemainīsies.
// Piemērs append uzvedībai, ja nav pietiekamas ietilpības
s := make([]int, 0, 0) // izmērs 0, ietilpība 0
s = append(s, 1) // izmērs 1, ietilpība 1. (0 -> 1)
s = append(s, 2) // izmērs 2, ietilpība 2. (1 -> 2)
s = append(s, 3) // izmērs 3, ietilpība 4. (2 -> 4)
s = append(s, 4) // izmērs 4, ietilpība 4
s = append(s, 5) // izmērs 5, ietilpība 8. (4 -> 8)
s2 := make([]int, 0, 1025) // izmērs 0, ietilpība 1025
s2 = append(s2, make([]int, 500)...) // izmērs 500, ietilpība 1025 (pietiekami)
s2 = append(s2, make([]int, 1000)...) // izmērs 1500, aptuveni 1025 + 1025*0.25 + epsilon
Specifiska algoritma ietilpības palielināšanai atrodas runtime iekšienē un var mainīties starp Go versijām. Tomēr kopējās noteikumi (divkāršošana līdz 1024, palielināšana par aptuveni 25% pēc tam) paliek spēkā.