加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.52kongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Go 泛型 Maps 包正式释出,当下可用!

发布时间:2021-12-06 23:38:48 所属栏目:语言 来源:互联网
导读:给大家带来一个关于泛型的新消息,那就是:在几天前,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(
给大家带来一个关于泛型的新消息,那就是:在几天前,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 的任何键/值对。

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!