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[:]
makeyordamida:
// 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)