1 Star 0 Fork 0

hongzhaomin/hzm-common-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
set.go 1.10 KB
一键复制 编辑 原始数据 按行查看 历史
hongzhaomin 提交于 2024-11-21 23:19 . streams优化
package coll
import (
"errors"
"reflect"
)
type Set[E comparable] map[E]struct{}
func OfSet[E comparable](set *map[E]struct{}) *Set[E] {
return (*Set[E])(set)
}
func OfSet4Arr[E comparable](arr []E) *Set[E] {
set := make(map[E]struct{}, len(arr))
for _, ele := range arr {
set[ele] = struct{}{}
}
return (*Set[E])(&set)
}
func (my *Set[E]) ToList() *List[E] {
list := make([]E, 0, my.Size())
for key := range *my {
list = append(list, key)
}
return OfList(&list)
}
func (my *Set[E]) Add(ele E) {
if !my.isValid(ele) {
panic(errors.New("无效元素"))
}
(*my)[ele] = struct{}{}
}
func (my *Set[E]) Remove(ele E) bool {
if !my.Contains(ele) {
return false
}
delete(*my, ele)
return true
}
func (my *Set[E]) Size() int {
return len(*my)
}
func (my *Set[E]) Contains(ele E) bool {
if !my.isValid(ele) {
return false
}
_, ok := (*my)[ele]
return ok
}
func (my *Set[E]) IsEmpty() bool {
return *my == nil || my.Size() == 0
}
func (my *Set[E]) isValid(ele E) bool {
rv := reflect.Indirect(reflect.ValueOf(ele))
if rv.IsZero() || rv.IsNil() {
return false
}
return rv.IsValid()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/hongzhaomin/hzm-common-go.git
git@gitee.com:hongzhaomin/hzm-common-go.git
hongzhaomin
hzm-common-go
hzm-common-go
018d78227d0b

搜索帮助