github.com/expr-lang/expr@v1.16.9/vm/runtime/sort.go (about)

     1  package runtime
     2  
     3  type SortBy struct {
     4  	Desc   bool
     5  	Array  []any
     6  	Values []any
     7  }
     8  
     9  func (s *SortBy) Len() int {
    10  	return len(s.Array)
    11  }
    12  
    13  func (s *SortBy) Swap(i, j int) {
    14  	s.Array[i], s.Array[j] = s.Array[j], s.Array[i]
    15  	s.Values[i], s.Values[j] = s.Values[j], s.Values[i]
    16  }
    17  
    18  func (s *SortBy) Less(i, j int) bool {
    19  	a, b := s.Values[i], s.Values[j]
    20  	if s.Desc {
    21  		return Less(b, a)
    22  	}
    23  	return Less(a, b)
    24  }
    25  
    26  type Sort struct {
    27  	Desc  bool
    28  	Array []any
    29  }
    30  
    31  func (s *Sort) Len() int {
    32  	return len(s.Array)
    33  }
    34  
    35  func (s *Sort) Swap(i, j int) {
    36  	s.Array[i], s.Array[j] = s.Array[j], s.Array[i]
    37  }
    38  
    39  func (s *Sort) Less(i, j int) bool {
    40  	a, b := s.Array[i], s.Array[j]
    41  	if s.Desc {
    42  		return Less(b, a)
    43  	}
    44  	return Less(a, b)
    45  }