Sobes.tech
Junior

Kaip dirbti su slices Go kalboje?

sobes.tech AI

Atsakymas iš AI

Go sąlygos nėra masyvai, o nuorodos į segmento (arba viso) pagrindinio masyvo. Tai dinaminės duomenų struktūros.

Sąlygos kūrimas:

  • Iš masyvo:
    // apibrėžiame masyvą
    arr := [5]int{1, 2, 3, 4, 5}
    // kuriame sąlygą iš dalies masyvo
    s1 := arr[1:4] // s1 turi elementus arr[1], arr[2], arr[3]
    s2 := arr[:3]  // s2 turi elementus arr[0], arr[1], arr[2]
    s3 := arr[2:]  // s3 turi elementus arr[2], arr[3], arr[4]
    s4 := arr[:]   // s4 nuoroda į visą masyvą
    
  • Su make:
    // Sukuriama sąlyga su ilgiu 5 ir talpa 5
    s := make([]int, 5)
    // Sukuriama sąlyga su ilgiu 5 ir talpa 10
    s_cap := make([]int, 5, 10)
    
  • Literalu:
    s := []int{1, 2, 3}
    

Pagrindinės sąlygos savybės:

  • len(s): grąžina dabartinį sąlygos ilgį.
  • cap(s): grąžina sąlygos talpą (maksimalų elementų skaičių, kuris gali būti saugomas prieš reallocation).

Pridedant elementus (append):

s := []int{1, 2}
s = append(s, 3)      // prideda vieną elementą
s = append(s, 4, 5)   // prideda kelis elementus
s2 := []int{6, 7}
s = append(s, s2...) // prideda kito sąlygos elementus

append gali sukelti pagrindinio masyvo reallocation, jei talpa nėra pakankama.

Elementų pašalinimas:

Elementų pašalinimas iš sąlygos pasiekiamas sukuriant naują sąlygą iš likusių elementų arba kopijuojant.

s := []int{1, 2, 3, 4, 5}
// Elemento pašalinimas pagal indeksą i
i := 2 // pašaliname elementą pagal indeksą 2 (t.y. 3)
s = append(s[:i], s[i+1:]...)

Sąlygų kopijavimas:

src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // kopijuoja elementus iš src į dst

copy kopijuoja minimalų iš dviejų sąlygų ilgį.

Iteracija per sąlygą:

s := []string{"a", "b", "c"}
for i, v := range s {
    // i - indeksas, v - reikšmė
}
for i := range s {
    // tik indeksas
}
for _, v := range s {
    // tik reikšmė
}

Sąlygos yra nuorodų tipai:

Sąlygų pakeitimai atsispindi pagrindiniame masyve ir kituose sąlygose, nuorodžiuose į tą patį atminties plotą.

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
// Dabar arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (elementas arr[2] pasikeitė)