当前位置: 首页 > news >正文

golang:对struct排序的方法

golang对struct排序的方法

以下代码示例,通过对Student 结构体的age字段进行从小到大和从大到小排序

方法一

使用 sort.Slice() 进行排序

package mainimport ("fmt""sort"
)type Student struct {name stringage  int
}func main() {students := []Student{{name: "tom", age: 18},{name: "jack", age: 20},{name: "steve", age: 19},}// 1、排序前fmt.Println(students)// [{tom 18} {jack 20} {steve 19}]// 2、由小到大排序sort.Slice(students, func(i, j int) bool {return students[i].age < students[j].age})fmt.Println(students)// [{tom 18} {steve 19} {jack 20}]// 3、由大到小排序sort.Slice(students, func(i, j int) bool {return students[j].age < students[i].age})fmt.Println(students)// [{jack 20} {steve 19} {tom 18}]
}

方法二

使用sort.Sort() 进行排序

使用sort.Sort() 方法需要重写Len()、Swap()、Less() 这三个方法

package mainimport ("fmt""sort"
)type Student struct {name stringage  int
}type Students []Studentfunc (a Students) Len() int {return len(a)
}func (a Students) Swap(i, j int) {a[i], a[j] = a[j], a[i]
}func (a Students) Less(i, j int) bool {return a[i].age < a[j].age
}func main() {students := []Student{{name: "tom", age: 18},{name: "jack", age: 20},{name: "steve", age: 19},}// 1、排序前fmt.Println(students)// [{tom 18} {jack 20} {steve 19}]// 2、由小到大排序sort.Sort(Students(students))fmt.Println(students)// [{tom 18} {steve 19} {jack 20}]// 3、由大到小 排序sort.Sort(sort.Reverse(Students(students)))fmt.Println(students)// [{jack 20} {steve 19} {tom 18}]}

参考
golang对struct排序的方法

相关文章:

  • 简述为什么Vue采用异步渲染 ?
  • idea 创建properties文件,解决乱码
  • 【Java】已解决java.sql.SQLTimeoutException异常
  • React-Redux学习笔记(自用)
  • Java Stream流应用
  • Android SurfaceFlinger——概述(一)
  • (3) cmake编译多个cpp文件
  • [AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
  • WPF 一个执行耗时任务,页面更新等待时间的例子
  • 【计算机毕业设计】211校园约拍微信小程序
  • Vue跨标签页数据通信
  • 广告变现小游戏对接广告流量变现平台开发 源码搭建
  • Vue在表单校验中trigger属性指定何时触发校验规则
  • 路由框架 ARouter 原理及源码解析
  • Linux-目录和文件
  • ES6语法详解(一)
  • flutter的key在widget list的作用以及必要性
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript学习总结——原型
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Web Storage相关
  • 阿里云购买磁盘后挂载
  • 闭包--闭包之tab栏切换(四)
  • 编写符合Python风格的对象
  • 测试如何在敏捷团队中工作?
  • 工作中总结前端开发流程--vue项目
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 爬虫模拟登陆 SegmentFault
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 学习使用ExpressJS 4.0中的新Router
  • 用 Swift 编写面向协议的视图
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #知识分享#笔记#学习方法
  • (04)odoo视图操作
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (19)夹钳(用于送货)
  • (7)svelte 教程: Props(属性)
  • (Java)【深基9.例1】选举学生会
  • (ros//EnvironmentVariables)ros环境变量
  • (SpringBoot)第七章:SpringBoot日志文件
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (zhuan) 一些RL的文献(及笔记)
  • (搬运以学习)flask 上下文的实现
  • (办公)springboot配置aop处理请求.
  • (第61天)多租户架构(CDB/PDB)
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)linux使用docker容器运行mysql
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))