123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package ezdb
- type sortable[T any] struct {
- Key string
- Value T
- }
- type keySort struct {
- a []string
- f SortFunc[string]
- }
- func (s *keySort) Len() int {
- return len(s.a)
- }
- func (s *keySort) Less(i, j int) bool {
- return s.f(s.a[i], s.a[j])
- }
- func (s *keySort) Result() []string {
- return s.a
- }
- func (s *keySort) Swap(i, j int) {
- a := s.a[i]
- b := s.a[j]
- s.a[i] = b
- s.a[j] = a
- }
- type valueSort[T any] struct {
- a []*sortable[T]
- f SortFunc[T]
- }
- func (s *valueSort[T]) Len() int {
- return len(s.a)
- }
- func (s *valueSort[T]) Less(i, j int) bool {
- a := s.a[i]
- b := s.a[j]
- return s.f(a.Value, b.Value)
- }
- func (s *valueSort[T]) Result() []string {
- k := []string{}
- for _, el := range s.a {
- k = append(k, el.Key)
- }
- return k
- }
- func (s *valueSort[T]) Swap(i, j int) {
- a := s.a[i]
- b := s.a[j]
- s.a[i] = b
- s.a[j] = a
- }
- func makeSortable[T any](m map[string]T) []*sortable[T] {
- a := []*sortable[T]{}
- for key, value := range m {
- a = append(a, &sortable[T]{Key: key, Value: value})
- }
- return a
- }
|