Go语言使用sort包对任意类型元素的集合进行排序的方法
时间:2022-05-05
本文章向大家介绍Go语言使用sort包对任意类型元素的集合进行排序的方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了Go语言使用sort包对任意类型元素的集合进行排序的方法。分享给大家供大家参考。具体如下:
使用sort包的函数进行排序时,集合需要实现sort.Inteface接口,该接口中有三个方法:
// Len is the number of elements in the collection.
Len() int
// Less reports whether the element with
// index i should sort before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
以下为简单示例:
//对任意对象进行排序
type Person struct {
name string
age int
}
//为*Person添加String()方法,便于输出
func (p *Person) String() string {
return fmt.Sprintf("( %s,%d )", p.name, p.age)
}
type PersonList []*Person
//排序规则:首先按年龄排序(由小到大),年龄相同时按姓名进行排序(按字符串的自然顺序)
func (list PersonList) Len() int {
return len(list)
}
func (list PersonList) Less(i, j int) bool {
if list[i].age < list[j].age {
return true
} else if list[i].age > list[j].age {
return false
} else {
return list[i].name < list[j].name
}
}
func (list PersonList) Swap(i, j int) {
var temp *Person = list[i]
list[i] = list[j]
list[j] = temp
}
func interfaceTest0203() {
fmt.Println("------")
p1 := &Person{"Tom", 19}
p2 := &Person{"Hanks", 19}
p3 := &Person{"Amy", 19}
p4 := &Person{"Tom", 20}
p5 := &Person{"Jogn", 21}
p6 := &Person{"Mike", 23}
pList := PersonList([]*Person{p1, p2, p3, p4, p5, p6})
sort.Sort(pList)
fmt.Println(pList)
/*output:
[( Amy,19 ) ( Hanks,19 ) ( Tom,19 ) ( Tom,20 ) ( Jogn,21 ) ( Mike,23 )] */
}
- 异步方式访问网页
- Silverlight:利用Panel实现自定义布局
- 《物联网智能终端信息安全白皮书》再次敲响物联网时代警钟
- Gitlab可视化代码树插件-Octotree
- 子线程调用UI线程的方法
- Silverlight:Dependency Property(依赖属性)学习笔记
- Silverlight:利用异步加载Xap实现自定义loading效果
- Docker容器学习梳理--手动制作系统镜像
- 怎样裁剪图片的局部
- vb中实现最佳按钮效果
- silverlight:wcf双工通讯学习笔记
- Docker容器学习梳理--web管理工具DockerUI部署记录
- Docker容器学习梳理-容器硬盘热扩容
- 检测到Loaderlock的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 编译和调试openjdk8
- linux编译openjdk8
- Elasticsearch从入门到放弃:瞎说Mapping
- PostgreSQL 为什么接受大量连接到数据库需要连接池
- 一站式的开源持续测试平台---MeterSphere
- 《RabbitMQ》如何保证消息的可靠性
- Ruby 和 Java 的基础语法比较
- 聊聊面试-NoClassDefFoundError 和 ClassNotFoundException 区别
- 聊聊面试-int和Integer的区别
- 记一次Linux修改MySQL配置不生效的问题
- VBA解析复合文档03——解析扇区链表
- C++核心准则E.17:不要试图在所有函数中捕捉所有异常
- 《图解算法》第1章 算法简介
- 自动化篇 | 这些自动化场景,批处理脚本完全可以取代 Python!
- 《RabbitMQ》如何保证消息不被重复消费