代码拉取完成,页面将自动刷新
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()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。