首页 > 代码库 > 代码片段 - Golang 实现集合操作
代码片段 - Golang 实现集合操作
package mainimport ( "fmt" "sort" "sync")type Set struct { sync.RWMutex m map[int]bool}// 新建集合对象func New(items ...int) *Set { s := &Set{ m: make(map[int]bool, len(items)), } s.Add(items...) return s}// 添加元素func (s *Set) Add(items ...int) { s.Lock() defer s.Unlock() for _, v := range items { s.m[v] = true }}// 删除元素func (s *Set) Remove(items ...int) { s.Lock() defer s.Unlock() for _, v := range items { delete(s.m, v) }}// 判断元素是否存在func (s *Set) Has(items ...int) bool { s.RLock() defer s.RUnlock() for _, v := range items { if _, ok := s.m[v]; !ok { return false } } return true}// 元素个数func (s *Set) Count() int { return len(s.m)}// 清空集合func (s *Set) Clear() { s.Lock() defer s.Unlock() s.m = map[int]bool{}}// 空集合判断func (s *Set) Empty() bool { return len(s.m) == 0}// 无序列表func (s *Set) List() []int { s.RLock() defer s.RUnlock() list := make([]int, 0, len(s.m)) for item := range s.m { list = append(list, item) } return list}// 排序列表func (s *Set) SortList() []int { s.RLock() defer s.RUnlock() list := make([]int, 0, len(s.m)) for item := range s.m { list = append(list, item) } sort.Ints(list) return list}// 并集func (s *Set) Union(sets ...*Set) *Set { r := New(s.List()...) for _, set := range sets { for e := range set.m { r.m[e] = true } } return r}// 差集func (s *Set) Minus(sets ...*Set) *Set { r := New(s.List()...) for _, set := range sets { for e := range set.m { if _, ok := s.m[e]; ok { delete(r.m, e) } } } return r}// 交集func (s *Set) Intersect(sets ...*Set) *Set { r := New(s.List()...) for _, set := range sets { for e := range s.m { if _, ok := set.m[e]; !ok { delete(r.m, e) } } } return r}// 补集func (s *Set) Complement(full *Set) *Set { r := New() for e := range full.m { if _, ok := s.m[e]; !ok { r.Add(e) } } return r}func main() { s1 := New(1, 2, 3, 4, 5, 6, 7, 8) s2 := New(3, 4, 5, 6) s3 := New(5, 6, 9, 10) r1 := s1.Union(s2, s3) // 获取并集 r2 := s1.Minus(s2, s3) // 获取差集 r3 := s1.Intersect(s2, s3) // 获取交集 r4 := s3.Complement(s1) // 获取 s3 相对于 s1 的补集 fmt.Println(r1.SortList()) fmt.Println(r2.SortList()) fmt.Println(r3.SortList()) fmt.Println(r4.SortList())}
代码片段 - Golang 实现集合操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。