Ce face maps.All
maps.All(m) returnează un iter.Seq2[K, V], adică o funcție-iterator care produce perechi cheie–valoare. for k, v := range maps.All(m) face același lucru ca for k, v := range m.
Rostul ei este să dai un map unei funcții care primește un iterator: maps.Collect, maps.Insert sau propriile tale funcții de filtrare. Astfel aceeași funcție poate primi perechi dintr-un map, dintr-un slice (slices.All) sau dintr-un fișier.
Ordinea perechilor este aleatorie, ca la orice parcurgere de map.
Parametri
| Parametru | Descriere |
|---|---|
m |
Map-ul parcurs. |
Ce returnează
Un iter.Seq2[K, V].
Exemple
Exemplul 1: O funcție de filtrare care primește un iterator
filtreaza primește perechi și păstrează doar produsele cu stoc mic. fmt.Println afișează un map cu cheile sortate, deci rezultatul este mereu același.
package main
import (
"fmt"
"iter"
"maps"
)
func filtreaza(perechi iter.Seq2[string, int], pastreaza func(int) bool) map[string]int {
rezultat := map[string]int{}
for k, v := range perechi {
if pastreaza(v) {
rezultat[k] = v
}
}
return rezultat
}
func main() {
stoc := map[string]int{"mere": 40, "pere": 3, "caise": 0, "prune": 25}
putin := filtreaza(maps.All(stoc), func(n int) bool { return n < 5 })
fmt.Println(putin)
}
Rezultat
map[caise:0 pere:3]
Exemplul 2: Copierea perechilor în alt map
package main
import (
"fmt"
"maps"
)
func main() {
iarna := map[string]float64{"ceai": 8, "cozonac": 35}
meniu := map[string]float64{"cafea": 9.5}
maps.Insert(meniu, maps.All(iarna))
fmt.Println(meniu)
}
Rezultat
map[cafea:9.5 ceai:8 cozonac:35]
Greșeli frecvente
- Folosești
maps.All(m)doar ca să parcurgi map-ul:for k, v := range meste mai simplu.
Comenzi înrudite
maps.Keys: Returnează un iterator peste cheile (Keys) sau valorile (Values) unui map, în ordine aleatorie.maps.Collect: Collect construiește un map nou din perechile unui iterator; Insert adaugă perechile într-un map existent.slices.All: Transformă un slice în iterator: All dă perechi (indice, valoare), Values doar valorile, Backward perechile de la coadă la cap.iter.Seq: Tipurile pentru iteratori: Seq produce valori una câte una, Seq2 produce perechi; ambele se parcurg cu for range.