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