Golang1.21-maps package
目录
Go1.21新增了maps包,该包提供了map相关的工具函数。
相关issue: https://github.com/golang/go/issues/57436
maps pkg中提供了部分相关的example。
删除⌗
可参考
内部的处理机制是遍历元素,满足条件,则调用delete
方法删除。
比较⌗
可参考
m1 := map[int]string{
1: "one",
10: "Ten",
1000: "THOUSAND",
}
m2 := map[int][]byte{
1: []byte("One"),
10: []byte("Ten"),
1000: []byte("Thousand"),
}
eq := maps.EqualFunc(m1, m2, func(v1 string, v2 []byte) bool {
return strings.EqualFold(v1, string(v2))
})
// 比较value使用 传入的函数
fmt.Println(eq)
m11 := map[string]int{"one": 1, "two": 2}
m22 := map[string]int{"one": 1, "two": 2}
// 比较value使用 !=
equal := maps.Equal(m11, m22) // true
fmt.Println(equal)
克隆和拷贝⌗
相关issue
从该issue的benchmark来看的话,maps.Clone
性能比普通的map copy操作是更有效率的。
// copy
dst := map[string]int{"one": 1, "three": 3}
src := map[string]int{"two": 2, "three": 33}
maps.Copy(dst, src)
fmt.Printf("%#v\n", dst) // map[string]int{"one":1, "three":33, "two":2}
// clone
m := map[string]int{"one": 1, "two": 2}
fmt.Printf("%v %d %p\n", m, len(m), &m) // map[one:1 two:2] 2 0xc000056020
cloned := maps.Clone(m)
fmt.Printf("%v %d %p\n", cloned, len(cloned), &cloned) // map[one:1 two:2] 2 0xc000056030
Read other posts