collections set
unknown
golang
a year ago
2.1 kB
4
Indexable
package set type ( Set struct { hash map[interface{}]nothing } nothing struct{} ) // Create a new set func New(initial ...interface{}) *Set { s := &Set{make(map[interface{}]nothing)} for _, v := range initial { s.Insert(v) } return s } // Find the difference between two sets func (this *Set) Difference(set *Set) *Set { n := make(map[interface{}]nothing) for k, _ := range this.hash { if _, exists := set.hash[k]; !exists { n[k] = nothing{} } } return &Set{n} } // Call f for each item in the set func (this *Set) Do(f func(interface{})) { for k, _ := range this.hash { f(k) } } // Test to see whether or not the element is in the set func (this *Set) Has(element interface{}) bool { _, exists := this.hash[element] return exists } // Add an element to the set func (this *Set) Insert(element interface{}) { this.hash[element] = nothing{} } // Find the intersection of two sets func (this *Set) Intersection(set *Set) *Set { n := make(map[interface{}]nothing) for k, _ := range this.hash { if _, exists := set.hash[k]; exists { n[k] = nothing{} } } return &Set{n} } // Return the number of items in the set func (this *Set) Len() int { return len(this.hash) } // Test whether or not this set is a proper subset of "set" func (this *Set) ProperSubsetOf(set *Set) bool { return this.SubsetOf(set) && this.Len() < set.Len() } // Remove an element from the set func (this *Set) Remove(element interface{}) { delete(this.hash, element) } // Test whether or not this set is a subset of "set" func (this *Set) SubsetOf(set *Set) bool { if this.Len() > set.Len() { return false } for k, _ := range this.hash { if _, exists := set.hash[k]; !exists { return false } } return true } // Find the union of two sets func (this *Set) Union(set *Set) *Set { n := make(map[interface{}]nothing) for k, _ := range this.hash { n[k] = nothing{} } for k, _ := range set.hash { n[k] = nothing{} } return &Set{n} }
Editor is loading...
Leave a Comment