Middle
append функциясын колдонгондо slice өлчөмү канчалык өсөт?
sobes.tech AI
AIден жооп
Слайс мүмкүн ар кандай жолдор менен көбөйүшү мүмкүн, учурдагы сыйымдылык cap(slice)ка жараша:
- Эгер сыйымдылык жетишсиз болсо: Жаңы сыйымдылык эң аз дегенде учурдагынын эки эсеси болот, эгер ал 1024дөн кичинекей болсо. Эгер ал 1024дөн чоң болсо, сыйымдылык болжол менен 25% көбөйтүлөт, жетиштүү болгонго чейин. Андан кийин ал жогору каралышы мүмкүн.
- Эгер сыйымдылык жетиштүү болсо: Слайс өлчөмү так эле кошулган элементтердин санына өсөт, жана сыйымдылык өзгөрбөйт.
// Жеткиликтүү сыйымдылык болбогондо appendтин мисалы
s := make([]int, 0, 0) // өлчөм 0, сыйымдылык 0
s = append(s, 1) // өлчөм 1, сыйымдылык 1. (0 -> 1)
s = append(s, 2) // өлчөм 2, сыйымдылык 2. (1 -> 2)
s = append(s, 3) // өлчөм 3, сыйымдылык 4. (2 -> 4)
s = append(s, 4) // өлчөм 4, сыйымдылык 4
s = append(s, 5) // өлчөм 5, сыйымдылык 8. (4 -> 8)
s2 := make([]int, 0, 1025) // өлчөм 0, сыйымдылык 1025
s2 = append(s2, make([]int, 500)...) // өлчөм 500, сыйымдылык 1025 (жетиштүү)
s2 = append(s2, make([]int, 1000)...) // өлчөм 1500, болжол менен 1025 + 1025*0.25 + epsilon
Көбөйтүү алгоритми runtime ичинде жайгашкан жана Go версиялары арасында өзгөрүшү мүмкүн. Бирок, жалпы эрежелер (1024гө чейин эки эсеге көбөйтүү, андан кийин болжол менен 25% көбөйтүү) сакталат.