随笔 - 301  文章 - 2  评论 - 16  阅读 - 34万

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

复制代码
对结构体指定字段进行排序:
  对结构体指定字段进行排序: 

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题:传送门
复制代码

 

posted on   Code2020  阅读(1244)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2020-07-01 Spring IOC 一——容器装配Bean的简单使用
2020-07-01 静态代理和动态代理
2020-07-01 Spring AOP——Spring 中面向切面编程
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示