Ce face slices.Compact
slices.Compact(s) elimină duplicatele vecine: [1 1 2 2 2 1] devine [1 2 1]. Ca să scoți toate duplicatele dintr-un slice, sortează-l întâi, apoi aplică Compact.
slices.CompactFunc(s, eq) decide egalitatea cu funcția eq și păstrează primul element din fiecare grup. De exemplu tratezi "Iași" și "IAȘI" ca fiind la fel.
Funcția lucrează în memoria slice-ului și returnează slice-ul mai scurt, care trebuie atribuit.
Parametri
| Parametru | Descriere |
|---|---|
s |
Slice-ul. |
eq |
Pentru CompactFunc: spune dacă două elemente vecine sunt egale. |
Ce returnează
Slice-ul fără duplicate consecutive.
Exemple
Exemplul 1: Duplicate vecine și toate duplicatele
package main
import (
"fmt"
"slices"
)
func main() {
s := []int{1, 1, 2, 2, 2, 1, 3, 3}
fmt.Println(slices.Compact(slices.Clone(s)))
slices.Sort(s)
s = slices.Compact(s)
fmt.Println(s)
}
Rezultat
[1 2 1 3]
[1 2 3]
Exemplul 2: Orașe unice, fără să conteze majusculele
package main
import (
"fmt"
"slices"
"strings"
)
func main() {
orase := []string{"Iași", "IAȘI", "iași", "Cluj", "cluj", "Arad"}
orase = slices.CompactFunc(orase, strings.EqualFold)
fmt.Println(orase)
}
Rezultat
[Iași Cluj Arad]
Greșeli frecvente
- Aștepți ca
Compactsă scoată toate duplicatele dintr-un slice nesortat: scoate doar duplicatele aflate unul lângă altul.
Comenzi înrudite
slices.Sort: Sortează crescător, pe loc, un slice de orice tip ordonat (numere, texte).slices.Delete: Delete șterge elementele s[i:j]; DeleteFunc șterge toate elementele care îndeplinesc o condiție. Ambele returnează slice-ul nou.maps.Keys: Returnează un iterator peste cheile (Keys) sau valorile (Values) unui map, în ordine aleatorie.