Go 泛型:maps 包正式釋出,現在可用!
大家好,我是煎魚。
給大家帶來一個關於泛型的新消息,那就是:在幾天前,Go 泛型的配套標準庫 golang.org/x/exp/maps 包已經正式提交,放出來了,可以使用。
如下圖:
cs.opensource.google
包代碼如下:
package maps
func Keys[M ~map[K]V, K comparable, V any](m M) []K {
r := make([]K, 0, len(m))
for k := range m {
r = append(r, k)
}
return r
}
func Values[M ~map[K]V, K comparable, V any](m M) []V {
r := make([]V, 0, len(m))
for _, v := range m {
r = append(r, v)
}
return r
}
func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool {
if len(m1) != len(m2) {
return false
}
for k, v1 := range m1 {
if v2, ok := m2[k]; !ok || v1 != v2 {
return false
}
}
return true
}
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 {
if len(m1) != len(m2) {
return false
}
for k, v1 := range m1 {
if v2, ok := m2[k]; !ok || !eq(v1, v2) {
return false
}
}
return true
}
func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool) {
for k, v := range m {
if del(k, v) {
delete(m, k)
}
}
}
-
Keys:返回 map 的鍵值內容,鍵值將以不確定的順序出現。
-
Values:返回 map 的值,值將以不確定的順序出現。
-
Equal:檢查兩個地圖是否包含相同的鍵 / 值對,內部會使用
==
來比較數值。 -
EqualFunc:
EqualFunc
與Equal
方法類似,但使用閉包方法來比較數值,鍵值仍然用==
來比較。 -
DeleteFunc:刪除 map 中閉包方法返回
true
的任何鍵 / 值對。
func Clear[M ~map[K]V, K comparable, V any](m M) {
for k := range m {
delete(m, k)
}
}
func Clone[M ~map[K]V, K comparable, V any](m M) M {
r := make(M, len(m))
for k, v := range m {
r[k] = v
}
return r
}
func Copy[M ~map[K]V, K comparable, V any](dst, src M) {
for k, v := range src {
dst[k] = v
}
}
-
Clear:清除從 map 中刪除所有條目,使之爲空。
-
Clone:返回一個 map 的副本,這是一個淺層克隆,新拷貝出來的的鍵和值使用普通的賦值來設置。
-
Copy:複製 src 中的所有鍵 / 值對,並將其加入 dst。當 src 中的一個鍵已經存在於 dst 中時,dst 中的值將被與 src 中的鍵相關的值所覆蓋。
本次 Go 泛型庫 maps 的更新,主要包含了泛型最新的特性的迭代,也就是 “近似元素”,源碼地址:https://cs.opensource.google/go/x/exp/+/master:maps/maps.go。
這一塊的語法介紹我們在《Go 新語法挺醜?最新的泛型類型約束介紹》 中有所介紹,有興趣的小夥伴可以看看。
泛型的時代已經來臨,我的身體已經準備好了。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/owYh5pdsgdZJY02bF0xJXQ