golang: 使用 sort 来排序
golang: 使用 sort 来排序
golang sort package: https://golang.org/src/sort
sort 操作的对象通常是一个 slice,需要满足三个基本的接口,并且能够使用整数来索引
// A type, typically a collection, that satisfies sort.Interface can be// sorted by the routines in this package. The methods require that the// elements of the collection be enumerated by an integer index.type Interface interface {// 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)}
ex-1 对 []int 从小到大排序
package mainimport ("fmt""sort")type IntSlice []intfunc (s IntSlice) Len() int { return len(s) }func (s IntSlice) Swap(i, j int){ s[i], s[j] = s[j], s[i] }func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] }func main() {a := []int{4,3,2,1,5,9,8,7,6}sort.Sort(IntSlice(a))fmt.Println("After sorted: ", a)}
ex-2 使用 sort.Ints 和 sort.Strings
golang 对常见的 []int 和 []string 分别定义了 IntSlice 和 StringSlice, 实现了各自的排序接口。而 sort.Ints 和 sort.Strings 可以直接对 []int 和 []string 进行排序, 使用起来非常方便
package mainimport ("fmt""sort")func main() {a := []int{3, 5, 4, -1, 9, 11, -14}sort.Ints(a)fmt.Println(a)ss := []string{"surface", "ipad", "mac pro", "mac air", "think pad", "idea pad"}sort.Strings(ss)fmt.Println(ss)sort.Sort(sort.Reverse(sort.StringSlice(ss)))fmt.Printf("After reverse: %v\n", ss)}
ex-3 使用 sort.Reverse 进行逆序排序
如果我们想对一个 sortable object 进行逆序排序,可以自定义一个type。但 sort.Reverse 帮你省掉了这些代码
package mainimport ("fmt""sort")func main() {a := []int{4,3,2,1,5,9,8,7,6}sort.Sort(sort.Reverse(sort.IntSlice(a)))fmt.Println("After reversed: ", a)}
ex-4 使用 sort.Stable 进行稳定排序
sort.Sort 并不保证排序的稳定性。如果有需要, 可以使用 sort.Stable
package mainimport ("fmt""sort")type person struct {Name stringAge int}type personSlice []personfunc (s personSlice) Len() int { return len(s) }func (s personSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }func (s personSlice) Less(i, j int) bool { return s[i].Age < s[j].Age }func main() {a := personSlice {{Name: "AAA",Age: 55,},{Name: "BBB",Age: 22,},{Name: "CCC",Age: 0,},{Name: "DDD",Age: 22,},{Name: "EEE",Age: 11,},}sort.Stable(a)fmt.Println(a)}
golang: 使用 sort 来排序相关推荐
- golang使用sort包排序
1. sort包简介 sort包实现了四种基本排序算法:插入排序.归并排序.堆排序和快速排序. 但是,这四种排序方法不是公开的,它们只在sort包内部被使用.所以,在对数据集合排序时,不必考虑应当选择 ...
- redis 的使用 (sort set排序集合类型操作)
sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子( ...
- Shell Sort 希尔排序 收藏
Shell Sort 希尔排序 收藏 希尔排序(Shell Sort)又叫做缩小增量排序(diminishing increment sort),是一种很优秀的排序法,算法本身不难理解,也很容易实现, ...
- [Java基础] sort方法--------排序的那些事
引言 在学习Java过程中,排序sort是我们常用的功能:在Java里,数组有Arrays.sort()可以排序,集合则是Collections.sort()方法排序:默认情况下是升序排列,但是降序又 ...
- 关于SAP的“Sort key 排序码”
对一个SAP新手来说,科目主档.客户主档.供应商主档中都有一个排序码栏位是比较不好理解的,下面我用图片来简单说明一下Sort key 排序码 的用途. 排序码的作用是凭证在生成时自动指定"分 ...
- 倒序排序_排序算法(六):Counting Sort 计数排序
之前文章介绍的一些排序算法都是基于比较来进行排序的,故它们在平均情况下的时间复杂度最好也不过是线性对数级别.这里我们来介绍一种简单的基于非比较的排序算法--Counting Sort 计数排序,其时间 ...
- C语言最简单的sleep sort睡眠排序实现(附完整源码)
C语言最简单的sleep sort睡眠排序实现 C语言最简单的sleep sort睡眠排序实现完整源码(定义,实现,main函数测试) C语言最简单的sleep sort睡眠排序实现完整源码(定义,实 ...
- C语言Selection Sort选择排序的算法(附完整源码)
C语言Selection Sort选择排序的算法 C语言Selection Sort选择排序的算法完整源码(定义,实现) C语言Selection Sort选择排序的算法完整源码(定义,实现) #if ...
- OpenGL blending sort 混合排序(前后)的实例
OpenGL blending sort 混合排序 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #in ...
最新文章
- 基于 Python 和 OpenCV 构建智能停车系统
- jenkins+findbugs+checkstyle+PMD静态代码检查(二)
- Caffe代码导读(4):数据集准备
- 让Bootstrap 3兼容IE8浏览器
- 一文说说这十多年来计算机玩摄影的历史
- SAP CRM里使用BAdI阻止产品主数据保存的一种办法
- jdk8 cms g1gc_G1 vs CMS vs平行GC
- slice深拷贝数组
- sprintf函数实现_从Go结构成员的升格到面向对象类的实现
- mysql cast和convert函数
- Excel怎么求和?5大常用的Excel求和公式
- win10中linux文件夹重命名,Win10家庭版重命名Administrator用户文件夹
- 制作WindowsServer2008镜像上传到OpenStack
- 微信php echo换行,微信小程序文字显示换行问题
- WIN10电脑升级显卡驱动后变慢不少
- jq ajax简单使用方法
- C语言指针(二重指针)
- MATLAB输出格式控制 %d,%f,%c,%s的用法
- SAP770系统FI模块配置(配置会计科目表)
- LINE FRIENDS 跨界李宁推出联名系列
热门文章
- ajax怎样示范事件,Ajax事件,方法
- Dataguard基本简介及三大保护模式介绍
- 媲美5G的Wifi网速、“备战”资产一键领……揭秘双11小二背后的保障力量
- 用java写一个四则运算计算器
- 苹果备忘录丢失如何恢复,小编支招教你轻松搞定
- Python 爬取表情包-斗图不会输在起跑线
- [Mysql] TRIM函数 | RTRIM函数 | LTRIM函数
- 前端面试题干货汇总(超详细)
- 2013.10.30 当着众人面批评一位员工
- 解析单句sql_单句SQL语句的解析方案。