Ce face maps.DeleteFunc
maps.DeleteFunc(m, del) parcurge map-ul și șterge fiecare pereche pentru care del(k, v) este true. Modifică map-ul pe loc.
În Go este permis să ștergi chei dintr-un map chiar în timp ce îl parcurgi cu range, deci poți scrie și bucla de mână cu delete(m, k). DeleteFunc face intenția mai clară, într-un singur rând. Pentru a șterge o singură cheie folosești funcția predefinită delete(m, k), iar pentru toate cheile clear(m).
Parametri
| Parametru | Descriere |
|---|---|
m |
Map-ul din care se șterge. |
del |
Condiția: primește cheia și valoarea, returnează true pentru perechile șterse. |
Ce returnează
Nimic; map-ul este modificat.
Exemple
Exemplul 1: Scoaterea produselor fără stoc
package main
import (
"fmt"
"maps"
)
func main() {
stoc := map[string]int{"mere": 40, "pere": 0, "caise": 0, "prune": 25}
maps.DeleteFunc(stoc, func(produs string, cantitate int) bool {
return cantitate == 0
})
fmt.Println(stoc, len(stoc))
}
Rezultat
map[mere:40 prune:25] 2
Exemplul 2: Condiție după cheie
package main
import (
"fmt"
"maps"
"strings"
)
func main() {
fisiere := map[string]int{"poza.jpg": 2048, "note.txt": 3, "temp.tmp": 512, "cache.tmp": 90}
maps.DeleteFunc(fisiere, func(nume string, _ int) bool {
return strings.HasSuffix(nume, ".tmp")
})
fmt.Println(fisiere)
}
Rezultat
map[note.txt:3 poza.jpg:2048]
Greșeli frecvente
- Parcurgi map-ul, strângi cheile de șters într-un slice și apoi le ștergi: nu este nevoie,
DeleteFunc(saudeleteîn buclarange) e sigur.
Comenzi înrudite
slices.Delete: Delete șterge elementele s[i:j]; DeleteFunc șterge toate elementele care îndeplinesc o condiție. Ambele returnează slice-ul nou.maps.Clone: Clone face o copie a unui map; Copy copiază toate perechile din src în dst, suprascriind cheile existente.maps.Keys: Returnează un iterator peste cheile (Keys) sau valorile (Values) unui map, în ordine aleatorie.