golang 数组之间的交集,差集,并集,补集
Posted tsxylhs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 数组之间的交集,差集,并集,补集相关的知识,希望对你有一定的参考价值。
今天公司需求两个数组之间的差集,类库下不下来,就独立出来了一份,希望读者有用
package model import ( "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
谢谢大家,谢谢!
以上是关于golang 数组之间的交集,差集,并集,补集的主要内容,如果未能解决你的问题,请参考以下文章