GO

GO — تغییر اسلایس (Modify Slice)

آخرین بروزرسانی: 1404/08/14

تغییر اسلایس (Modify Slice)

اینجا یاد می گیری «تغییر اسلایس (Slice)» یعنی چه. اسلایس فهرست پویاست. می توانی عضو بگیری، عوض کنی، یا کپی بگیری. مثل لیست خرید که هر لحظه کم وزیاد می شود.

دسترسی به عناصر اسلایس

برای گرفتن یک عضو، از اندیس استفاده کن. اندیس از صفر شروع می شود؛ پس [0] اولین عضو است.

package main
import (
  "fmt"
)

func main() {
  prices := []int{10, 20, 30}

  fmt.Println(prices[0])
  fmt.Println(prices[2])
}

مشاهده در ادیتور

تغییر مقدار یک عضو

با همان اندیس می توانی مقدار را عوض کنی. مثل تصحیح نمره.

package main
import (
  "fmt"
)

func main() {
  prices := []int{10, 20, 30}
  prices[2] = 50
  fmt.Println(prices[0])
  fmt.Println(prices[2])
}

مشاهده در ادیتور

افزودن عضو با append()

تابع append اعضای جدید را به انتهای اسلایس اضافه می کند. طول و ظرفیت ممکن است بزرگ تر شوند.

package main
import (
  "fmt"
)

func main() {
  myslice1 := []int{1, 2, 3, 4, 5, 6}
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  myslice1 = append(myslice1, 20, 21)
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))
}

مشاهده در ادیتور

افزودن یک اسلایس به اسلایس دیگر

برای چسباندن همه اعضای یک اسلایس، از ... استفاده کن. این یعنی «همه عناصر».

package main
import (
  "fmt"
)

func main() {
  myslice1 := []int{1, 2, 3}
  myslice2 := []int{4, 5, 6}
  myslice3 := append(myslice1, myslice2...)

  fmt.Printf("myslice3 = %v\n", myslice3)
  fmt.Printf("length = %d\n", len(myslice3))
  fmt.Printf("capacity = %d\n", cap(myslice3))
}

مشاهده در ادیتور

تغییر طول با بازبُرش و append

می توانی با «بازبُرش» روی آرایه یا با append طول را تغییر دهی. ظرفیت به جای شروع تا انتهای آرایه وابسته است.

package main
import (
  "fmt"
)

func main() {
  arr1 := [6]int{9, 10, 11, 12, 13, 14}
  myslice1 := arr1[1:5]
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  myslice1 = arr1[1:3]
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  myslice1 = append(myslice1, 20, 21, 22, 23)
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))
}

مشاهده در ادیتور

بهره وری حافظه با copy()

گاهی آرایه بزرگ است اما چند عضو می خواهی. با copy یک اسلایس کوچک و مستقل بساز تا حافظه کم تر مصرف شود.

package main
import (
  "fmt"
)

func main() {
  numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
  fmt.Printf("numbers = %v\n", numbers)
  fmt.Printf("length = %d\n", len(numbers))
  fmt.Printf("capacity = %d\n", cap(numbers))

  neededNumbers := numbers[:len(numbers)-10]
  numbersCopy := make([]int, len(neededNumbers))
  copy(numbersCopy, neededNumbers)

  fmt.Printf("numbersCopy = %v\n", numbersCopy)
  fmt.Printf("length = %d\n", len(numbersCopy))
  fmt.Printf("capacity = %d\n", cap(numbersCopy))
}

مشاهده در ادیتور

گام های عملی

  1. یک اسلایس بساز و عضو اول را چاپ کن.
  2. عضوی را عوض کن و نتیجه را ببین.
  3. با append عضو اضافه کن و ظرفیت را بررسی کن.
  4. بخشی را کپی کن تا اسلایس سبک تر شود.

جمع بندی سریع

  • اندیس از صفر شروع می شود.
  • append طول را زیاد می کند.
  • برای چسباندن اسلایس، از ... استفاده کن.
  • copy حافظه را بهینه می کند.

برای مرور مفاهیم پایه، به اسلایس ها سر بزن. اگر تازه ای، از آرایه ها شروع کن.