package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
people := []Person{
{"Alice", 30},
{"Bob", 25},
{"Charlie", 35},
}
sort.Slice(people, func(i, j int) bool {
return people[i].Age > people[j].Age
})
fmt.Println(people)
}
自定义排序函数设计要点
- 函数签名:排序函数需要接受两个索引参数
i
和 j
,这两个索引对应切片中的元素位置。函数返回一个布尔值,用于表示 i
索引对应的元素是否应该排在 j
索引对应的元素之前。
- 比较逻辑:在本题中,要实现按
Age
字段降序排序,所以当 people[i].Age > people[j].Age
时返回 true
,即 i
位置的元素年龄大于 j
位置的元素年龄时,i
位置的元素排在 j
位置元素之前。如果是升序排序,则应改为 people[i].Age < people[j].Age
。
- 稳定性:
sort.Slice
使用的排序算法是不稳定的。如果需要稳定排序,可使用 sort.SliceStable
函数,其使用方式与 sort.Slice
类似,同样需要传入切片和自定义排序函数。