sort.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package ezdb
  2. type sortable[T any] struct {
  3. Key string
  4. Value T
  5. }
  6. type keySort[T any] struct {
  7. a []*sortable[T]
  8. f SortFunc[string]
  9. }
  10. func (s *keySort[T]) Len() int {
  11. return len(s.a)
  12. }
  13. func (s *keySort[T]) Less(i, j int) bool {
  14. a := s.a[i]
  15. b := s.a[j]
  16. return s.f(a.Key, b.Key)
  17. }
  18. func (s *keySort[T]) Result() map[string]T {
  19. m := map[string]T{}
  20. for _, el := range s.a {
  21. m[el.Key] = el.Value
  22. }
  23. return m
  24. }
  25. func (s *keySort[T]) Swap(i, j int) {
  26. a := s.a[i]
  27. b := s.a[j]
  28. s.a[i] = b
  29. s.a[j] = a
  30. }
  31. type valueSort[T any] struct {
  32. a []*sortable[T]
  33. f SortFunc[T]
  34. }
  35. func (s *valueSort[T]) Len() int {
  36. return len(s.a)
  37. }
  38. func (s *valueSort[T]) Less(i, j int) bool {
  39. a := s.a[i]
  40. b := s.a[j]
  41. return s.f(a.Value, b.Value)
  42. }
  43. func (s *valueSort[T]) Result() map[string]T {
  44. m := map[string]T{}
  45. for _, el := range s.a {
  46. m[el.Key] = el.Value
  47. }
  48. return m
  49. }
  50. func (s *valueSort[T]) Swap(i, j int) {
  51. a := s.a[i]
  52. b := s.a[j]
  53. s.a[i] = b
  54. s.a[j] = a
  55. }
  56. func makeSortable[T any](m map[string]T) []*sortable[T] {
  57. a := []*sortable[T]{}
  58. for key, value := range m {
  59. a = append(a, &sortable[T]{Key: key, Value: value})
  60. }
  61. return a
  62. }