Ce face slices.All
Din Go 1.23, bucla for range poate parcurge și funcții-iterator (iter.Seq, iter.Seq2). slices.All(s) produce perechi (indice, valoare), exact ca for i, v := range s. slices.Values(s) produce doar valorile.
Utilitatea lor apare când o funcție cere un iterator: maps.Collect, slices.Sorted, slices.AppendSeq sau propriile tale funcții care primesc iter.Seq.
slices.Backward(s) parcurge slice-ul de la ultimul element la primul, cu indicii originali, fără să-l modifice și fără să scrii o buclă cu i--.
Parametri
| Parametru | Descriere |
|---|---|
s |
Slice-ul parcurs. |
Ce returnează
Un iterator: iter.Seq2[int, E] pentru All și Backward, iter.Seq[E] pentru Values.
Exemple
Exemplul 1: All, Values și Backward
package main
import (
"fmt"
"slices"
)
func main() {
zile := []string{"luni", "marți", "miercuri"}
for i, z := range slices.All(zile) {
fmt.Println(i, z)
}
for z := range slices.Values(zile) {
fmt.Print(z, " ")
}
fmt.Println()
for i, z := range slices.Backward(zile) {
fmt.Println(i, z)
}
}
Rezultat
0 luni
1 marți
2 miercuri
luni marți miercuri
2 miercuri
1 marți
0 luni
Exemplul 2: Iteratori dați altor funcții
maps.Collect primește perechile (indice, valoare) și construiește un map. slices.Sorted primește valorile și returnează un slice nou, sortat.
package main
import (
"fmt"
"maps"
"slices"
)
func main() {
orase := []string{"Iași", "Arad", "Cluj"}
dupaIndice := maps.Collect(slices.All(orase))
fmt.Println(dupaIndice)
sortate := slices.Sorted(slices.Values(orase))
fmt.Println(sortate, orase)
}
Rezultat
map[0:Iași 1:Arad 2:Cluj]
[Arad Cluj Iași] [Iași Arad Cluj]
Greșeli frecvente
- Folosești
slices.All(s)doar ca să parcurgi slice-ul:for i, v := range sface exact același lucru, mai simplu. - Modifici slice-ul în timp ce îl parcurgi cu
BackwardsauAll: iteratorul citește din aceeași memorie și poate vedea valorile schimbate.
Comenzi înrudite
slices.Collect: Collect strânge valorile unui iterator într-un slice nou; AppendSeq le adaugă la finalul unui slice existent.slices.Sorted: Strânge valorile unui iterator într-un slice nou și îl sortează: Sorted (ordine naturală), SortedFunc și SortedStableFunc (comparație proprie).iter.Seq: Tipurile pentru iteratori: Seq produce valori una câte una, Seq2 produce perechi; ambele se parcurg cu for range.maps.All: Returnează un iterator peste perechile (cheie, valoare) ale unui map, în ordine aleatorie.slices.Reverse: Inversează ordinea elementelor unui slice, pe loc.