package main
//支援任意型別新增
import (
"fmt"
"sync"
)
type inter interface{}/定義一個介面
type Set struct {
m map[inter]bool//定義一個任意型別的map 集合
sync.RWMutex//定義一個互斥鎖
}
//定一個方法 返回一個集合
func New() *Set {
return &Set{
m: map[inter]bool{},
}
}
//新增方法
func (s *Set) Add(item inter) {
s.Lock()//鎖住
defer s.Unlock()//延遲釋放鎖
s.m[item] = true
}
//刪除集合
func (s *Set) Remove(item inter) {
s.Lock()
s.Unlock()
delete(s.m, item)
}
//判斷這個集合中有沒有這個元素
func (s *Set) Has(item inter) bool {
s.RLock()
defer s.RUnlock()
_, ok := s.m[item]
return ok
}
//返回集合的長度
func (s *Set) Len() int {
return len(s.List())
}
//集合清楚空
func (s *Set) Clear() {
s.Lock()
defer s.Unlock()
s.m = map[inter]bool{}
}
//判斷集合裡面是否有資料
func (s *Set) IsEmpty() bool {
if s.Len() == 0 {
return true
}
return false
}
func (s *Set) List() []inter {
s.RLock()
defer s.RUnlock()
list := []inter{}//定義一個陣列
for item := range s.m {
list = append(list, item)
}
return list
}
func main() {
s := New()
s.Add(11)
s.Add("aa")
for i, k := range s.List() {
fmt.Println(i, k)
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結