github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/goset/intset.go (about) 1 2 package goset 3 4 import ( 5 "sort" 6 ) 7 8 type IntSet struct { 9 Map map[int]struct{} 10 } 11 12 func NewIntSet(values ...int) *IntSet{ 13 a := new(IntSet) 14 a.Map = make(map[int]struct{},len(values)) 15 for _,v := range values{ 16 a.Map[v] = none 17 } 18 return a 19 } 20 21 func (a *IntSet)Add(elements ...int) *IntSet{ 22 for _,e := range elements { 23 a.Map[e] = none 24 } 25 return a 26 } 27 28 func (a *IntSet)Remove(elements ...int) *IntSet{ 29 for _,e := range elements { 30 delete(a.Map,e) 31 } 32 return a 33 } 34 35 func (a *IntSet)Contains(elements ...int)bool{ 36 for _,e := range elements { 37 if _,ok := a.Map[e]; !ok { 38 return false 39 } 40 } 41 return true 42 } 43 44 func (a *IntSet)ContainsSet(b *IntSet) bool{ 45 for element, _ := range b.Map{ 46 if _, ok := a.Map[element]; !ok { 47 return false 48 } 49 } 50 return true 51 } 52 53 func (a *IntSet)Size() int{ 54 return len(a.Map) 55 } 56 57 func (a *IntSet)RemoveSet(b *IntSet) *IntSet{ 58 for element,_ := range b.Map{ 59 delete(a.Map,element) 60 } 61 return a 62 } 63 64 func (a *IntSet)AddSet(b *IntSet) *IntSet{ 65 for element, _ := range b.Map{ 66 a.Map[element] = none 67 } 68 return a 69 } 70 71 func (a *IntSet)InterSection(b *IntSet) *IntSet{ 72 for element, _ := range a.Map{ 73 if _,ok := b.Map[element]; !ok{ 74 delete(a.Map, element) 75 } 76 } 77 return a 78 } 79 80 func (a *IntSet)ToSortedSlice() []int{ 81 slice := make([]int, len(a.Map)) 82 i := 0 83 for element, _ := range a.Map{ 84 slice[i] = element 85 i++ 86 } 87 sort.Ints(slice) 88 return slice 89 }