Sobes.tech
Junior

Go'da slices bilan qanday ishlash mumkin?

sobes.tech AI

AIdan javob

Go'dagi dilimlar (slice'lar) massiv emas, balki asosiy massivning segmentiga (yoki to'liq) murojaat qiladi. Bu dinamik ma'lumotlar tuzilmalari.

Dilimlarni yaratish:

  • Array'dan:
// massivni aniqlash
arr := [5]int{1, 2, 3, 4, 5}
// massivdan qismli dilim yaratish
s1 := arr[1:4] // s1, arr[1], arr[2], arr[3] elementlarini o'z ichiga oladi
// Boshqa dilim yaratish
s2 := arr[:3]  // s2, arr[0], arr[1], arr[2] elementlarini o'z ichiga oladi
// Butun massivga murojaat qiluvchi dilim
s3 := arr[2:]  // s3, arr[2], arr[3], arr[4] elementlarini o'z ichiga oladi
// Butun massivga murojaat qiluvchi dilim
s4 := arr[:]
  • make yordamida:
// 5 uzunlik va 5 sig'imli dilim yaratish
s := make([]int, 5)
// 5 uzunlik va 10 sig'imli dilim yaratish
s_cap := make([]int, 5, 10)
  • Literal:
s := []int{1, 2, 3}

Dilimning asosiy xususiyatlari:

  • len(s): hozirgi uzunligini qaytaradi.
  • cap(s): sig'imini qaytaradi (reallocationdan oldin maksimal elementlar soni).

Elementlarni qo'shish (append):

s := []int{1, 2}
s = append(s, 3)      // bitta element qo'shadi
s = append(s, 4, 5)   // bir nechta element qo'shadi
s2 := []int{6, 7}
s = append(s, s2...) // boshqa dilim elementlarini qo'shadi

append sig'im yetarli bo'lmasa, asosiy massivni reallocation qilishi mumkin.

Elementlarni o'chirish:

Dilimdan elementlarni o'chirish, qolgan elementlar bilan yangi dilim yaratish yoki nusxalash orqali amalga oshiriladi.

s := []int{1, 2, 3, 4, 5}
// Indeks i bo'yicha elementni o'chirish
i := 2 // 2-indeksdagi elementni o'chirish (ya'ni 3)
s = append(s[:i], s[i+1:]...)

Dilimlarni nusxalash:

src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // src elementlarini dst ga nusxalash

copy ikkita dilimning minimal uzunligini nusxalash uchun ishlatiladi.

Dilimlar bo'yicha iteratsiya:

s := []string{"a", "b", "c"}
for i, v := range s {
    // i - indeks, v - qiymat
}
for i := range s {
    // faqat indeks
}
for _, v := range s {
    // faqat qiymat
}

Dilimlar referens turlar:

Dilimdagi o'zgarishlar, asosiy massiv va unga murojaat qiluvchi boshqa dilimlarda ham aks etadi.

arr := [5]int{1, 2, 3, 4, 5}
s1 := arr[1:4] // [2, 3, 4]
s2 := arr[2:5] // [3, 4, 5]

s1[0] = 99
// Endi arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (element arr[2] o'zgardi)