- 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)
- }
- }
执行结果:
