Ce face slices.Delete
slices.Delete(s, i, j) scoate elementele de pe pozițiile de la i până la j-1 și mută restul spre stânga. Pentru un singur element scrii slices.Delete(s, i, i+1).
slices.DeleteFunc(s, del) scoate toate elementele pentru care del(element) returnează true: notele sub 5, produsele fără stoc, textele goale.
Ambele modifică memoria slice-ului inițial și returnează slice-ul mai scurt, pe care trebuie să-l atribui. Din Go 1.22, pozițiile rămase libere la final sunt puse pe valoarea zero, ca să nu țină în memorie obiecte inutile.
Parametri
| Parametru | Descriere |
|---|---|
s |
Slice-ul. |
i, j |
Pentru Delete: intervalul șters, [i, j). Dacă este invalid, programul se oprește cu panic. |
del |
Pentru DeleteFunc: condiția elementelor șterse. |
Ce returnează
Slice-ul fără elementele șterse.
Exemple
Exemplul 1: Ștergere după poziție
package main
import (
"fmt"
"slices"
)
func main() {
orase := []string{"Iași", "Cluj", "Arad", "Brașov", "Sibiu"}
orase = slices.Delete(orase, 1, 3) // scoate Cluj și Arad
fmt.Println(orase)
i := slices.Index(orase, "Brașov")
orase = slices.Delete(orase, i, i+1)
fmt.Println(orase)
}
Rezultat
[Iași Brașov Sibiu]
[Iași Sibiu]
Exemplul 2: Ștergere după o condiție
package main
import (
"fmt"
"slices"
"strings"
)
func main() {
note := []int{9, 4, 7, 3, 10, 5}
note = slices.DeleteFunc(note, func(n int) bool { return n < 5 })
fmt.Println(note)
cuvinte := []string{"mere", "", "pere", " ", "prune"}
cuvinte = slices.DeleteFunc(cuvinte, func(c string) bool { return strings.TrimSpace(c) == "" })
fmt.Println(cuvinte, len(cuvinte))
}
Rezultat
[9 7 10 5]
[mere pere prune] 3
Exemplul 3: Slice-ul inițial este modificat
Delete lucrează în aceeași memorie. Vechea variabilă vede elementele mutate și valori zero la final.
package main
import (
"fmt"
"slices"
)
func main() {
original := []int{1, 2, 3, 4, 5}
scurt := slices.Delete(original, 0, 2)
fmt.Println(scurt)
fmt.Println(original)
}
Rezultat
[3 4 5]
[3 4 5 0 0]
Greșeli frecvente
- Nu atribui rezultatul (
slices.Delete(s, i, i+1)singur): lungimea luisrămâne aceeași și vezi valori zero la final. - Ștergi elemente dintr-un slice în timp ce îl parcurgi cu
for i := range s: indicii se decalează. FoloseșteDeleteFunc.
Comenzi înrudite
slices.Insert: Inserează una sau mai multe valori la poziția i și returnează slice-ul rezultat.slices.Compact: Înlocuiește fiecare șir de elemente egale consecutive cu un singur element (ca uniq din Unix).slices.Index: Returnează poziția primei apariții a unei valori (Index) sau a primului element care îndeplinește o condiție (IndexFunc), ori -1.maps.DeleteFunc: Șterge din map toate perechile pentru care funcția del(cheie, valoare) returnează true.