hmm/count.go

39 lines
788 B
Go

package hmm
import (
"sort"
)
// CountNSort consumes a stream of strings, calculates counts of occurances in
// the stream. After the stream is closed it sorts the unique keys by frequency
// and returns it as a Results.
func CountNSort(in <-chan string) Results {
res := map[string]int{}
for i := range in {
res[i]++
}
r := Results{}
for k, v := range res {
r = append(r, Result{k, v})
}
sort.Sort(r)
return r
}
// Result encodes a frequency for seen string.
type Result struct {
Key string
Count int
}
// Results exists to sort a slice of Result
type Results []Result
func (r Results) Len() int { return len(r) }
func (r Results) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
func (r Results) Less(i, j int) bool { return r[i].Count < r[j].Count }