Ce face slices.Chunk
slices.Chunk(s, n) returnează un iterator pe care îl parcurgi cu for bucata := range slices.Chunk(s, n). Fiecare bucată are n elemente, în afară de ultima, care poate avea mai puține. Este util la paginare sau la trimiterea datelor în loturi.
Bucățile sunt sub-slice-uri ale lui s, nu copii: folosesc aceeași memorie. Dacă n este mai mic decât 1, programul se oprește cu panic.
Parametri
| Parametru | Descriere |
|---|---|
s |
Slice-ul împărțit. |
n |
Mărimea unei bucăți (≥ 1). |
Ce returnează
Un iter.Seq care produce bucățile, în ordine.
Exemple
Exemplul 1: Elevi împărțiți în grupe de câte 3
package main
import (
"fmt"
"slices"
)
func main() {
elevi := []string{"Ana", "Mihai", "Ioana", "Radu", "Elena", "Dan", "Maria"}
grupa := 1
for g := range slices.Chunk(elevi, 3) {
fmt.Printf("Grupa %d: %v\n", grupa, g)
grupa++
}
}
Rezultat
Grupa 1: [Ana Mihai Ioana]
Grupa 2: [Radu Elena Dan]
Grupa 3: [Maria]
Exemplul 2: Sume pe loturi
package main
import (
"fmt"
"slices"
)
func main() {
vanzari := []int{120, 80, 45, 300, 15, 60, 90, 10}
for lot := range slices.Chunk(vanzari, 4) {
suma := 0
for _, v := range lot {
suma += v
}
fmt.Println(lot, "=", suma, "lei")
}
}
Rezultat
[120 80 45 300] = 545 lei
[15 60 90 10] = 175 lei
Greșeli frecvente
- Modifici o bucată și te miri că s-a schimbat și slice-ul inițial: bucățile împart memoria cu el. Folosește
slices.Clonepe bucată dacă vrei o copie.
Comenzi înrudite
slices.All: Transformă un slice în iterator: All dă perechi (indice, valoare), Values doar valorile, Backward perechile de la coadă la cap.slices.Collect: Collect strânge valorile unui iterator într-un slice nou; AppendSeq le adaugă la finalul unui slice existent.iter.Seq: Tipurile pentru iteratori: Seq produce valori una câte una, Seq2 produce perechi; ambele se parcurg cu for range.