github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/goset/stringset.go (about) 1 2 package goset 3 4 import "sort" 5 6 var none = struct{}{} 7 type StringSet struct { 8 Map map[string]struct{} 9 } 10 11 12 func NewStringSet(values ... string) *StringSet { 13 a := new(StringSet) 14 a.Map = make(map[string]struct{}, len(values)) 15 for _,v := range values{ 16 a.Map[v] = none 17 } 18 return a 19 } 20 21 func (a *StringSet) Add(elements ...string) *StringSet { 22 for _, e := range elements { 23 a.Map[e] = none 24 } 25 return a 26 } 27 28 func (a *StringSet) Remove(elements ...string) *StringSet { 29 for _, e := range elements { 30 delete(a.Map, e) 31 } 32 return a 33 } 34 35 func (a *StringSet) Contains(elements ...string) 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 *StringSet)ContainsSet(b *StringSet) 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 54 func (a *StringSet) Size() int { 55 return len(a.Map) 56 } 57 58 func (a *StringSet) RemoveSet(b *StringSet) *StringSet { 59 for element, _ := range b.Map { 60 delete(a.Map, element) 61 } 62 return a 63 } 64 65 func (a *StringSet) AddSet(b *StringSet) *StringSet { 66 for element, _ := range b.Map { 67 a.Map[element] = none 68 } 69 return a 70 } 71 72 func (a *StringSet) InterSection(b *StringSet) *StringSet { 73 for element, _ := range a.Map { 74 if _, ok := b.Map[element]; !ok { 75 delete(a.Map, element) 76 } 77 } 78 return a 79 } 80 81 func (a *StringSet) ToSortedSlice() []string { 82 slice := make([]string, len(a.Map)) 83 i := 0 84 for element, _ := range a.Map { 85 slice[i] = element 86 i++ 87 } 88 sort.Strings(slice) 89 return slice 90 } 91