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