maps.DeleteFunc în Go

Șterge din map toate perechile pentru care funcția del(cheie, valoare) returnează true.

Sintaxă
import "maps"

func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool)

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 (sau delete în bucla range) 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.