定义
package MyDataType
import (
"fmt"
)
var Exists = struct{}{}
//set类型
type Set struct {
// struct为结构体类型的变量
m map[interface{}]struct{}
}
// 定义非空结构体
type S struct {
a uint16
b uint32
}
//返回一个set
func New(items ...interface{}) *Set {
// 获取Set的地址
s := &Set{}
// 声明map类型的数据结构
s.m = make(map[interface{}]struct{})
_ = s.Add(items...)
return s
}
func (s *Set) Size() int {
return len(s.m)
}
//添加元素
func (s *Set) Add(items ...interface{}) error {
for _, item := range items {
s.m[item] = Exists
}
return nil
}
//删除元素
func (s *Set) Remove(val int) {
delete(s.m, val)
}
//获取长度
func (s *Set) Len() int {
return len(s.m)
}
//清空set
func (s *Set) Clear() {
s.m = make(map[interface{}]struct{})
}
//遍历set
func (s *Set) Traverse(){
for v := range s.m {
fmt.Println(v)
}
}
//包含
func (s *Set) Contains(item interface{}) bool {
_, ok := s.m[item]
return ok
}
func (s *Set) IsSubset(other *Set) bool {
// s的size长于other,不用说了
if s.Size() > other.Size() {
return false
}
// 迭代遍历
for key := range s.m {
if !other.Contains(key) {
return false
}
}
return true
}
使用
import (
"MyDataType"
)
func main() {
set := MyDataType.New(0)
_ = set.Add("weilingyan", "weijiamin", "weilingyan", "tianxiaodi")
set.Traverse()
set.Clear()
}