Ce face slices.Insert
slices.Insert(s, i, v...) pune valorile v înaintea elementului de pe poziția i, mutând restul spre dreapta. Cu i == len(s) adaugi la final, ca append.
Funcția returnează slice-ul nou, pe care trebuie să-l atribui: s = slices.Insert(s, i, v). Dacă nu mai este loc în memoria slice-ului, se alocă una nouă (ca la append).
Dacă i este mai mare decât len(s), programul se oprește cu panic.
Parametri
| Parametru | Descriere |
|---|---|
s |
Slice-ul inițial. |
i |
Poziția de inserare, între 0 și len(s). |
v |
Una sau mai multe valori de inserat. |
Ce returnează
Slice-ul cu valorile inserate.
Exemple
Exemplul 1: Inserare la început, la mijloc și la final
package main
import (
"fmt"
"slices"
)
func main() {
zile := []string{"marți", "joi"}
zile = slices.Insert(zile, 0, "luni")
zile = slices.Insert(zile, 2, "miercuri")
zile = slices.Insert(zile, len(zile), "vineri", "sâmbătă")
fmt.Println(zile)
}
Rezultat
[luni marți miercuri joi vineri sâmbătă]
Exemplul 2: Păstrarea unei liste sortate
BinarySearch dă poziția unde trebuie inserată nota ca lista să rămână sortată.
package main
import (
"fmt"
"slices"
)
func main() {
note := []int{}
for _, n := range []int{8, 5, 10, 7, 9} {
i, _ := slices.BinarySearch(note, n)
note = slices.Insert(note, i, n)
fmt.Println(note)
}
}
Rezultat
[8]
[5 8]
[5 8 10]
[5 7 8 10]
[5 7 8 9 10]
Greșeli frecvente
- Apelezi
slices.Insert(s, i, v)fără să atribui rezultatul: slice-ul tău nu se schimbă.
Comenzi înrudite
slices.Delete: Delete șterge elementele s[i:j]; DeleteFunc șterge toate elementele care îndeplinesc o condiție. Ambele returnează slice-ul nou.slices.Replace: Înlocuiește elementele s[i:j] cu valorile date (oricâte) și returnează slice-ul rezultat.slices.BinarySearch: Caută rapid o valoare într-un slice sortat; returnează poziția (sau unde s-ar insera) și dacă a găsit-o.slices.Concat: Lipește mai multe slice-uri într-unul nou, alocat o singură dată.