3 Star 0 Fork 0

neuro-netw0rk/server-golib

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
map.go 1.88 KB
一键复制 编辑 原始数据 按行查看 历史
LeoWang 提交于 5个月前 . 整合golib和serverlib
package generics
type (
// ZeroStruct 空結構
ZeroStruct = struct{}
// TMap 泛型字典
TMap[K comparable, V any] map[K]V
)
// Zero 空結構對象
var Zero = ZeroStruct{}
// List 構造泛型字典, 可安全傳入 nil 值
func Map[K comparable, V any](m map[K]V) TMap[K, V] {
if m == nil {
return TMap[K, V]{}
} else {
return TMap[K, V](m)
}
}
// Set 構造泛型集合, 可安全傳入 nil 值
func Set[T comparable](m map[T]ZeroStruct) TMap[T, ZeroStruct] {
return Map(m)
}
// Len 返回長度
func (m TMap[K, V]) Len() int {
return len(m)
}
// Empty 字典是否爲空
func (m TMap[K, V]) Empty() bool {
return m.Len() == 0
}
// Delete 移除元素
func (m TMap[K, V]) Delete(key K) TMap[K, V] {
delete(m, key)
return m
}
// Filter 過濾元素, 不滿足的 filter 的鍵值對將被移除
func (m TMap[K, V]) Filter(filter func(key K, value V) bool) TMap[K, V] {
removeKeys := []K{}
for key, value := range m {
if !filter(key, value) {
removeKeys = append(removeKeys, key)
}
}
for _, key := range removeKeys {
delete(m, key)
}
return m
}
// ForEach 遍歷處理所有鍵值對
func (m TMap[K, V]) ForEach(handle func(key K, value V) error) (succeeded int, err error) {
for key, value := range m {
err = handle(key, value)
if err != nil {
return
}
succeeded++
}
return
}
// Root 獲取根對象
func (m TMap[K, V]) Root() map[K]V {
return m
}
// Keys 返回所有鍵名列表
func (m TMap[K, V]) Keys() (list TList[K]) {
list = make([]K, 0, len(m))
for key := range m {
list = append(list, key)
}
return
}
// Values 返回所有鍵值列表
//
// - TMap[K, V] 之 V 不滿足 comparable 約束, 故不能直接轉爲 List[V]
// - 但在具體場景中可通過 List(m.Values()) 在滿足約束的條件下轉換
func (m TMap[K, V]) Values() (list []V) {
list = make([]V, 0, len(m))
for _, value := range m {
list = append(list, value)
}
return
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/neuro-netw0rk/server-golib.git
git@gitee.com:neuro-netw0rk/server-golib.git
neuro-netw0rk
server-golib
server-golib
v0.0.5-beta

搜索帮助