Ce face maps.Collect
maps.Collect(seq) parcurge un iterator de perechi (iter.Seq2) și construiește un map nou cu ele. Dacă aceeași cheie apare de mai multe ori, rămâne ultima valoare.
maps.Insert(m, seq) pune perechile în map-ul m, care trebuie să existe deja (nu nil). Cheile existente sunt suprascrise.
Sursa perechilor poate fi maps.All, slices.All (indice, valoare) sau un iterator scris de tine.
Parametri
| Parametru | Descriere |
|---|---|
seq |
Iteratorul de perechi cheie–valoare. |
m |
Pentru Insert: map-ul în care se adaugă. |
Ce returnează
Collect: un map nou. Insert: nimic, modifică m.
Exemple
Exemplul 1: Inversarea unui map cu un iterator propriu
inversat produce perechile (valoare, cheie). Collect construiește din ele map-ul invers: din cod poștal în oraș.
package main
import (
"fmt"
"iter"
"maps"
)
func inversat[K, V comparable](m map[K]V) iter.Seq2[V, K] {
return func(yield func(V, K) bool) {
for k, v := range m {
if !yield(v, k) {
return
}
}
}
}
func main() {
coduri := map[string]string{"Iași": "700001", "Cluj-Napoca": "400001", "Arad": "310001"}
oraseDupaCod := maps.Collect(inversat(coduri))
fmt.Println(oraseDupaCod)
}
Rezultat
map[310001:Arad 400001:Cluj-Napoca 700001:Iași]
Exemplul 2: Insert completează un map existent
Perechile (indice, nume) se adaugă lângă cheia 3 existentă. În al doilea map, cheia lapte exista deja și primește valoarea nouă.
package main
import (
"fmt"
"maps"
"slices"
)
func main() {
locuri := map[int]string{3: "Ana"}
maps.Insert(locuri, slices.All([]string{"Mihai", "Ioana", "Radu"}))
fmt.Println(locuri)
preturi := map[string]float64{"pâine": 4.5, "lapte": 7}
maps.Insert(preturi, maps.All(map[string]float64{"lapte": 7.5, "ouă": 15}))
fmt.Println(preturi)
}
Rezultat
map[0:Mihai 1:Ioana 2:Radu 3:Ana]
map[lapte:7.5 ouă:15 pâine:4.5]
Greșeli frecvente
- Apelezi
maps.Insertpe un mapnil(var m map[string]int): programul se oprește cupanic: assignment to entry in nil map. Creează-l cumakesau foloseșteCollect.
Comenzi înrudite
maps.All: Returnează un iterator peste perechile (cheie, valoare) ale unui map, în ordine aleatorie.maps.Clone: Clone face o copie a unui map; Copy copiază toate perechile din src în dst, suprascriind cheile existente.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.