mapvaluesort.go 776 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //对map的value值排序
  2. package luaerrdata
  3. import (
  4. "sort"
  5. )
  6. type ValSorter struct {
  7. Keys []string
  8. Vals []int
  9. }
  10. func MapValueSort(m map[string]int) *ValSorter {
  11. vs := NewValSorter(m)
  12. vs.Sort()
  13. return vs
  14. }
  15. func NewValSorter(m map[string]int) *ValSorter {
  16. vs := &ValSorter{
  17. Keys: make([]string, 0, len(m)),
  18. Vals: make([]int, 0, len(m)),
  19. }
  20. for k, v := range m {
  21. vs.Keys = append(vs.Keys, k)
  22. vs.Vals = append(vs.Vals, v)
  23. }
  24. return vs
  25. }
  26. func (vs *ValSorter) Sort() {
  27. sort.Sort(vs)
  28. }
  29. func (vs *ValSorter) Len() int {
  30. return len(vs.Vals)
  31. }
  32. func (vs *ValSorter) Less(i, j int) bool {
  33. return vs.Vals[i] < vs.Vals[j]
  34. }
  35. func (vs *ValSorter) Swap(i, j int) {
  36. vs.Vals[i], vs.Vals[j] = vs.Vals[j], vs.Vals[i]
  37. vs.Keys[i], vs.Keys[j] = vs.Keys[j], vs.Keys[i]
  38. }