package main
import (
"fmt"
"sort"
)
// User 定义用户结构体
type User struct {
Name string `json:"name"`
Sex string `json:"sex"`
Age int `json:"age"`
Height int `json:"height"`
}
func main() {
//模拟用户数据
users := []User{
{Name: "张三", Sex: "男", Age: 33, Height: 180},
{Name: "李四", Sex: "男", Age: 25, Height: 175},
{Name: "赵兰", Sex: "女", Age: 30, Height: 168},
{Name: "牛芳", Sex: "女", Age: 20, Height: 165},
{Name: "刘亮", Sex: "男", Age: 27, Height: 181},
{Name: "胡涛", Sex: "男", Age: 24, Height: 175},
}
//打印一下排序前的数据顺序
for _, u := range users {
fmt.Printf("未排序: %+v \n", u)
}
fmt.Println("--------------------------分割线--------------------------")
//排序需求: 第一条件以身高参数倒序,第二条件以年龄升序
sort.SliceStable(users, func(i, j int) bool {
if users[i].Height > users[j].Height { //如果第一个用户身高参数比第二个用户身高参数大,直接返回true
return true
} else if users[i].Height < users[j].Height { //如果第一个用户身高参数比第二个用户身高参数小,直接返回false
return false
}
//如果第一个用户身高参数和第二个用户身高参数相等,那么再比较两者的年龄参数,规则以此类推
return users[i].Age < users[j].Age
})
//打印一下排序后的数据顺序
for _, u := range users {
fmt.Printf("已排序: %+v \n", u)
}
}
执行结果: