slices.Insert în Go

Inserează una sau mai multe valori la poziția i și returnează slice-ul rezultat.

Sintaxă
import "slices"

func Insert[S ~[]E, E any](s S, i int, v ...E) S

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ă.