Sobes.tech
Junior — Middle

როგორ შეიძლება გაზარდოთ ფუნქციას გადაცემული სეგმენტის ზომა პროგრამირების ენაში?

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, სლაისი (slice) არის სტრუქტურა, რომელიც შეიცავს მაჩვენებელს მასივზე, სიგრძეს და მოცულობას. თუ გსურთ გადაცემული სლაის ზომის გაზრდა, შეგიძლიათ შემდეგი გააკეთოთ:

  • გადაუგზავნოთ სლაისი მნიშვნელობით, მაგრამ ფუნქციის შიგნით შექმნათ ახალი სლაისი გაზრდილი სიგრძით ან მოცულობით append ფუნქციის გამოყენებით.
  • თუ გსურთ თავად სლაის შეცვლა (მაგალითად, სიგრძის გაზრდა) და გსურთ, რომ ცვლილებები გარედანაც იყოს ნაჩვენები, შეგიძლიათ გადაუგზავნოთ მაჩვენებელი სლაის (*[]T), მაშინ ფუნქციის შიგნით შეგიძლიათ სლაისი გადაწეროთ.

მაგალითი სლაის გაზრდის შესახებ ფუნქციის შიგნით, ახალი სლაის დაბრუნებით:

func extendSlice(s []int, n int) []int {
    // დაამატეთ n ნულოვანი ელემენტი
    s = append(s, make([]int, n)...) 
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = extendSlice(s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

თუ ფუნქცია უნდა შეცვალოს სლაისი უშუალოდ და არ დააბრუნოს, გამოიყენეთ მაჩვენებელი:

func extendSlicePtr(s *[]int, n int) {
    *s = append(*s, make([]int, n)...) 
}

func main() {
    s := []int{1, 2, 3}
    extendSlicePtr(&s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

ასე რომ, სლაის ზომის გაზრდისათვის, უნდა ან ახალი სლაისი დაბრუნოთ, ან მაჩვენებელი გადაუგზავნოთ.