MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Slice

Slice reprezintă o secvență de elemente de același tip cu lungime variabilă. Spre deosebire de array-uri, lungimea unui srez nu este fixă și poate să se schimbe dinamic, adică putem adăuga elemente noi sau elimina elemente existente.

Un slice se definește la fel ca un array, cu excepția faptului că lungimea nu este specificată:

var users []string

De asemenea, un slice poate fi inițializat cu valori:

var users = []string{"Tom", "Alice", "Kate"}
// sau așa
users2 := []string{"Tom", "Alice", "Kate"}

Accesul la elementele slice-ului se face la fel ca la un array, prin index, iar noi putem parcurge toate elementele folosind un ciclu for:

var users []string = []string{"Tom", "Alice", "Kate"}
fmt.Println(users[2])   // Kate
users[2] = "Katherine"
 
for _, value := range users{
    fmt.Println(value)
}

Folosind funcția make(), putem crea un slice cu mai multe elemente, care vor avea valori implicite:

var users []string = make([]string, 3)
users[0] = "Tom"
users[1] = "Alice"
users[2] = "Bob"

Adăugarea în slice

Pentru a adăuga elemente în slice, se utilizează funcția integrată append(slice, value). Primul parametru al funcției este slice-ul în care trebuie să adăugăm, iar al doilea parametru este valoarea care trebuie adăugată. Rezultatul funcției este un slice mărit.

users := []string{"Tom", "Alice", "Kate"}
users = append(users, "Bob")
     
for _, value := range users{
    fmt.Println(value)
}

Operatorul de slice

Operatorul de slice s[i:j] creează un nou slice din secvența s, care conține elementele secvenței s de la indexul i până la j-1. Trebuie să fie respectată condiția 0 <= i <= j <= cap(s). Ca secvență de bază din care se extrag elementele poate fi utilizat un array, un pointer către un array sau alt slice. În rezultatul obținut, slice-ul va avea j-i elemente.

Dacă valoarea i nu este specificată, se folosește implicit valoarea 0. Dacă valoarea j nu este specificată, se folosește lungimea secvenței de bază s:

// array-ul inițial
initialUsers := [8]string{"Bob", "Alice", "Kate", "Sam", "Tom", "Paul", "Mike", "Robert"}
users1 := initialUsers[2:6]     // de la 3-lea până la 6-lea
users2 := initialUsers[:4]      // de la 1-lea până la 4-lea
users3 := initialUsers[3:]      // de la 4-lea până la final
     
fmt.Println(users1)     // ["Kate", "Sam", "Tom", "Paul"]
fmt.Println(users2)     // ["Bob", "Alice", "Kate", "Sam"]
fmt.Println(users3)     // ["Sam", "Tom", "Paul", "Mike", "Robert"]

Ștergerea unui element

Ce facem dacă trebuie să ștergem un anumit element? În acest caz, putem combina funcția append și operatorul de srez:

users := []string{"Bob", "Alice", "Kate", "Sam", "Tom", "Paul", "Mike", "Robert"}
// ștergem al 4-lea element
var n = 3
users = append(users[:n], users[n+1:]...)   
fmt.Println(users)      //["Bob", "Alice", "Kate", "Tom", "Paul", "Mike", "Robert"]