Std map
Go 1.21 引入了一些新的标准库函数来操作 map 类型的数据结构。这些函数提供了更便捷和通用的方式来处理映射。以下是这些函数的详细说明:
Clone
func Clone[M ~map[K]V, K comparable, V any](m M) M
Clone 函数创建并返回一个给定映射 m 的副本。这个副本是一个新的映射,包含了原映射中的所有键值对。
示例:
original := map[string]int{"a": 1, "b": 2}
copy := Clone(original)
Copy
func Copy[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2)
Copy 函数将 src 映射中的所有键值对复制到 dst 映射中。如果 dst 中已经存在某个键,则其值将被覆盖。
示例:
src := map[string]int{"a": 1, "b": 2}
dst := map[string]int{"b": 3, "c": 4}
Copy(dst, src)
// dst 现在是 map[string]int{"a": 1, "b": 2, "c": 4}
DeleteFunc
func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool)
DeleteFunc 函数根据给定的条件函数 del 删除映射 m 中的键值对。del 函数接受键和值作为参数,并返回一个布尔值,指示是否应删除该键值对。
示例:
m := map[string]int{"a": 1, "b": 2, "c": 3}
DeleteFunc(m, func(k string, v int) bool {
return v%2 == 0 // 删除所有值为偶数的键值对
})
// m 现在是 map[string]int{"a": 1, "c": 3}
Equal
func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool
Equal 函数比较两个映射 m1 和 m2 是否相等。如果两个映射具有相同的键值对,则它们被认为是相等的。
示例:
m1 := map[string]int{"a": 1, "b": 2}
m2 := map[string]int{"a": 1, "b": 2}
equal := Equal(m1, m2) // equal 是 true
EqualFunc
func EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool
EqualFunc 函数比较两个映射 m1 和 m2 是否相等,但使用自定义的比较函数 eq 来比较值。eq 函数接受两个值作为参数,并返回一个布尔值,指示它们是否相等。
示例:
m1 := map[string]int{"a": 1, "b": 2}
m2 := map[string]float64{"a": 1.0, "b": 2.0}
equal := EqualFunc(m1, m2, func(v1 int, v2 float64) bool {
return float64(v1) == v2
}) // equal 是 true
这些新引入的函数使得处理映射更加方便和灵活,特别是在需要进行复杂操作或比较时。