[]A
- это не фрагмент int, это фрагмент структур, и вы должны реализовать sort.Interface
, чтобы описать, как его сортировать.
Вот рабочий пример:
package main
import (
"fmt"
"sort"
)
type A struct {
X int
}
type ByX []A
func (a ByX) Len() int { return len(a) }
func (a ByX) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByX) Less(i, j int) bool { return a[i].X < a[j].X }
func main() {
x := make([]A, 0)
x = append(x, A{1})
x = append(x, A{2})
sort.Sort(sort.Reverse(ByX(x)))
fmt.Println(x)
}
Попробуйте на игровой площадке Go .
Кроме того, вы можете позвонить sort.Slice
и предоставить ему только функцию Less
:
sort.Slice(x, func(i, j int) bool { return x[i].X > x[j].X })
YouСледует заметить, что функция less отличается.Поскольку мы хотим выполнить сортировку в обратном порядке и сокращение sort.Slice
не совместимо с sort.Reverse
, нам пришлось изменить функцию less, чтобы она возвращала противоположное (>
вместо <
).