Middle
რა დონით იზრდება slice-ის ზომა append ფუნქციის გამოყენებისას?
sobes.tech AI
პასუხი AI-სგან
სლაისის ზომა შეიძლება განსხვავებული გზებით გაიზარდოს, დამოკიდებულია მიმდინარე მოცულობაზე cap(slice):
- თუ მოცულობა არ არის საკმარისი: ახალი მოცულობა იქნება მინიმუმ ორჯერ მეტი მიმდინარე მოცულობის, თუ ეს ნაკლებია 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%-იანი ზრდა შემდეგ) რჩება ძალაში.