golang 数组之间的交集,差集,并集,补集

时间:2025-03-02 09:45:48
package model import ( "sort" "sync" ) type Set struct { m map[int]bool } // 新建集合对象 func New(items ...int) *Set { s := &Set{ m: make(map[int]bool, len(items)), } (items...) return s } // 添加元素 func (s *Set) Add(items ...int) { () defer () for _, v := range items { [v] = true } } // 删除元素 func (s *Set) Remove(items ...int) { () defer () for _, v := range items { delete(, v) } } // 判断元素是否存在 func (s *Set) Has(items ...int) bool { () defer () for _, v := range items { if _, ok := [v]; !ok { return false } } return true } // 元素个数 func (s *Set) Count() int { return len() } // 清空集合 func (s *Set) Clear() { () defer () = map[int]bool{} } // 空集合判断 func (s *Set) Empty() bool { return len() == 0 } // 无序列表 func (s *Set) List() []int { () defer () list := make([]int, 0, len()) for item := range { list = append(list, item) } return list } // 排序列表 func (s *Set) SortList() []int { () defer () list := make([]int, 0, len()) for item := range { list = append(list, item) } (list) return list } // 并集 func (s *Set) Union(sets ...*Set) *Set { r := New(()...) for _, set := range sets { for e := range set.m { [e] = true } } return r } // 差集 func (s *Set) Minus(sets ...*Set) *Set { r := New(()...) for _, set := range sets { for e := range set.m { if _, ok := [e]; ok { delete(, e) } } } return r } // 交集 func (s *Set) Intersect(sets ...*Set) *Set { r := New(()...) for _, set := range sets { for e := range { if _, ok := set.m[e]; !ok { delete(, e) } } } return r } // 补集 func (s *Set) Complement(full *Set) *Set { r := New() for e := range { if _, ok := [e]; !ok { (e) } } return r }