sensu-telegram-handler/vendor/github.com/sensu/sensu-go/util/strings/occurrences.go

61 lines
1.2 KiB
Go

package strings
// OccurrencesOf returns the number of times a string appears in the given slice
// of strings.
func OccurrencesOf(s string, in []string) int {
o := NewOccurrenceSet(in...)
return o.Get(s)
}
// OccurrenceSet captures of occurrences of string values.
type OccurrenceSet map[string]int
// NewOccurrenceSet returns new instance of OccurrenceSet.
func NewOccurrenceSet(s ...string) OccurrenceSet {
o := OccurrenceSet{}
o.Add(s...)
return o
}
// Add entry and increment count
func (o OccurrenceSet) Add(ss ...string) {
for _, s := range ss {
num := o[s]
o[s] = num + 1
}
}
// Remove items from set
func (o OccurrenceSet) Remove(ss ...string) {
for _, s := range ss {
delete(o, s)
}
}
// Get returns occurrences of given string
func (o OccurrenceSet) Get(entry string) int {
return o[entry]
}
// Values returns all occurrences
func (o OccurrenceSet) Values() []string {
vs := []string{}
for v := range o {
vs = append(vs, v)
}
return vs
}
// Merge given set of occurrences
func (o OccurrenceSet) Merge(b OccurrenceSet) {
for name, bCount := range b {
aCount := o[name]
o[name] = aCount + bCount
}
}
// Size of values tracked
func (o OccurrenceSet) Size() int {
return len(o)
}