Ce face slices.Collect
slices.Collect(seq) parcurge iteratorul și pune fiecare valoare într-un slice nou, în ordinea primită. Cel mai des îl folosești cu maps.Keys sau maps.Values, care returnează iteratori, nu slice-uri.
slices.AppendSeq(s, seq) adaugă valorile iteratorului la finalul lui s, ca un append, și returnează slice-ul rezultat.
Atenție: valorile din maps.Keys/maps.Values vin într-o ordine aleatorie. Dacă ordinea contează, folosește slices.Sorted în loc de Collect.
Parametri
| Parametru | Descriere |
|---|---|
seq |
Iteratorul ale cărui valori le strângi. |
s |
Pentru AppendSeq: slice-ul la care adaugi. |
Ce returnează
Un slice cu valorile iteratorului.
Exemple
Exemplul 1: Valorile unui iterator propriu
numerePare este un iterator scris de mână (vezi iter.Seq). Collect îl transformă în slice.
package main
import (
"fmt"
"iter"
"slices"
)
func numerePare(max int) iter.Seq[int] {
return func(yield func(int) bool) {
for i := 0; i <= max; i += 2 {
if !yield(i) {
return
}
}
}
}
func main() {
pare := slices.Collect(numerePare(10))
fmt.Println(pare)
pare = slices.AppendSeq(pare, slices.Values([]int{100, 200}))
fmt.Println(pare)
}
Rezultat
[0 2 4 6 8 10]
[0 2 4 6 8 10 100 200]
Exemplul 2: Cheile unui map, sortate
Collect păstrează ordinea aleatorie a map-ului, deci sortăm după. Mai scurt: slices.Sorted(maps.Keys(m)).
package main
import (
"fmt"
"maps"
"slices"
)
func main() {
stoc := map[string]int{"mere": 40, "pere": 12, "caise": 7}
chei := slices.Collect(maps.Keys(stoc))
slices.Sort(chei)
fmt.Println(chei)
fmt.Println(slices.Sorted(maps.Keys(stoc)))
}
Rezultat
[caise mere pere]
[caise mere pere]
Greșeli frecvente
- Afișezi direct
slices.Collect(maps.Keys(m))și te bazezi pe ordine: ordinea diferă de la o rulare la alta.
Comenzi înrudite
slices.Sorted: Strânge valorile unui iterator într-un slice nou și îl sortează: Sorted (ordine naturală), SortedFunc și SortedStableFunc (comparație proprie).slices.All: Transformă un slice în iterator: All dă perechi (indice, valoare), Values doar valorile, Backward perechile de la coadă la cap.maps.Keys: Returnează un iterator peste cheile (Keys) sau valorile (Values) unui map, în ordine aleatorie.iter.Seq: Tipurile pentru iteratori: Seq produce valori una câte una, Seq2 produce perechi; ambele se parcurg cu for range.