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  }