Junior
Kā strādāt ar slices Go?
sobes.tech AI
Atbilde no AI
Go sēklas nav masīvi, bet norāda uz segmentu (vai visu) pamata masīvā. Tie ir dinamiskas datu struktūras.
Sēklu izveide:
- No masīva:
// definējam masīvu arr := [5]int{1, 2, 3, 4, 5} // izveidojam sēklu no daļas no masīva s1 := arr[1:4] // s1 satur elementus arr[1], arr[2], arr[3] s2 := arr[:3] // s2 satur elementus arr[0], arr[1], arr[2] s3 := arr[2:] // s3 satur elementus arr[2], arr[3], arr[4] s4 := arr[:] // s4 norāda uz visu masīvu - Ar
make:// Izveido sēklu ar garumu 5 un kapacitāti 5 s := make([]int, 5) // Izveido sēklu ar garumu 5 un kapacitāti 10 s_cap := make([]int, 5, 10) - Ar literālo:
s := []int{1, 2, 3}
Galvenās īpašības:
len(s): atgriež pašreizējo sēklas garumu.cap(s): atgriež sēklas kapacitāti (maksimālo elementu skaitu, kas var tikt saglabāts pirms reallocation).
Elementu pievienošana (append):
s := []int{1, 2}
s = append(s, 3) // pievieno vienu elementu
s = append(s, 4, 5) // pievieno vairākus elementus
s2 := []int{6, 7}
s = append(s, s2...) // pievieno cita sēkla elementus
append var izraisīt pamata masīva reallocation, ja kapacitāte nav pietiekama.
Elementu dzēšana:
Elementu dzēšana no sēklas tiek panākta, izveidojot jaunu sēklu no atlikušajiem elementiem vai kopējot.
s := []int{1, 2, 3, 4, 5}
// Elementa dzēšana pēc indeksa i
i := 2 // dzēš elementu ar indeksu 2 (t.i. 3)
s = append(s[:i], s[i+1:]...)
Sēklu kopēšana:
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // kopē elementus no src uz dst
copy kopē minimālo no abu sēklu garumiem.
Iterācija pa sēklu:
s := []string{"a", "b", "c"}
for i, v := range s {
// i - indekss, v - vērtība
}
for i := range s {
// tikai indekss
}
for _, v := range s {
// tikai vērtība
}
Sēklas ir norāžu tipi:
Izmaiņas sēklā ir redzamas pamata masīvā un citās sēklās, kas norāda uz to pašu atmiņas apgabalu.
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
// Tagad arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (elements arr[2] mainījās)