• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Go通过结构体指定字段进行排序

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
对结构体指定字段进行排序:
  对结构体指定字段进行排序: 

package main
 
import (
    "fmt"
    "sort"
)
 
// 对结构体指定字段进行排序
type User struct {
    Name string `json:"name"` // `json:"xxx"`:在结构体和json字符串字段顺序不一致的情况下:unmarshal根据tag去寻找对应字段的内容
    Age  int    `json:"age"`
}
 
// type Users []User
// func SortByAge(u Users) {
func SortByAge(u []User) {
    fmt.Printf("源数据:%+v\n", u)
 
    sort.Slice(u, func(i, j int) bool { // desc
        return u[i].Age > u[j].Age
    })
    fmt.Printf("按Age降序:%+v\n", u)
 
    sort.Slice(u, func(i, j int) bool { // asc
        return u[i].Age < u[j].Age
    })
    fmt.Printf("按Age升序:%+v\n", u)
}
 
func main() {
    // 初始化结构体对象数组:
    // 初始化方法1:
    // users := Users{
    //     {
    //         Name: "test1",
    //         Age:  22,
    //     },
    //     {
    //         Name: "test2",
    //         Age:  19,
    //     },
    //     {
    //         Name: "test3",
    //         Age:  25,
    //     },
    // }
 
    // 初始化方法2:
    var users []User
    var u User
    u.Name = "test1"
    u.Age = 22
    users = append(users, u)
    u.Name = "test2"
    u.Age = 20
    users = append(users, u)
    u.Name = "test3"
    u.Age = 26
    users = append(users, u)
 
    SortByAge(users)
}
 
// 输出:
源数据:[{Name:test1 Age:22} {Name:test2 Age:20} {Name:test3 Age:26}]
按Age降序:[{Name:test3 Age:26} {Name:test1 Age:22} {Name:test2 Age:20}]
按Age升序:[{Name:test2 Age:20} {Name:test1 Age:22} {Name:test3 Age:26}]
 
此外也可使用sort.Sort()方法,不过需要自己去实现 Len()、Swap()、Less()方法,参考:golang对自定义类型排序

另外,通过借助“结构体指定字段进行排序”解了一道LeetCode 347题:传送门

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
tarsgo为protoc-gen-go添加tarsrpc插件发布时间:2022-07-10
下一篇:
Go版GTK:环境搭建(windows)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap