maps.All în Go

Returnează un iterator peste perechile (cheie, valoare) ale unui map, în ordine aleatorie.

Sintaxă
import "maps"

func All[Map ~map[K]V, K comparable, V any](m Map) iter.Seq2[K, V]

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 m este 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.