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 来排序相关推荐

  1. golang使用sort包排序

    1. sort包简介 sort包实现了四种基本排序算法:插入排序.归并排序.堆排序和快速排序. 但是,这四种排序方法不是公开的,它们只在sort包内部被使用.所以,在对数据集合排序时,不必考虑应当选择 ...

  2. redis 的使用 (sort set排序集合类型操作)

    sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子( ...

  3. Shell Sort 希尔排序 收藏

    Shell Sort 希尔排序 收藏 希尔排序(Shell Sort)又叫做缩小增量排序(diminishing increment sort),是一种很优秀的排序法,算法本身不难理解,也很容易实现, ...

  4. [Java基础] sort方法--------排序的那些事

    引言 在学习Java过程中,排序sort是我们常用的功能:在Java里,数组有Arrays.sort()可以排序,集合则是Collections.sort()方法排序:默认情况下是升序排列,但是降序又 ...

  5. 关于SAP的“Sort key 排序码”

    对一个SAP新手来说,科目主档.客户主档.供应商主档中都有一个排序码栏位是比较不好理解的,下面我用图片来简单说明一下Sort key 排序码 的用途. 排序码的作用是凭证在生成时自动指定"分 ...

  6. 倒序排序_排序算法(六):Counting Sort 计数排序

    之前文章介绍的一些排序算法都是基于比较来进行排序的,故它们在平均情况下的时间复杂度最好也不过是线性对数级别.这里我们来介绍一种简单的基于非比较的排序算法--Counting Sort 计数排序,其时间 ...

  7. C语言最简单的sleep sort睡眠排序实现(附完整源码)

    C语言最简单的sleep sort睡眠排序实现 C语言最简单的sleep sort睡眠排序实现完整源码(定义,实现,main函数测试) C语言最简单的sleep sort睡眠排序实现完整源码(定义,实 ...

  8. C语言Selection Sort选择排序的算法(附完整源码)

    C语言Selection Sort选择排序的算法 C语言Selection Sort选择排序的算法完整源码(定义,实现) C语言Selection Sort选择排序的算法完整源码(定义,实现) #if ...

  9. OpenGL blending sort 混合排序(前后)的实例

    OpenGL blending sort 混合排序 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #in ...

最新文章

  1. 基于 Python 和 OpenCV 构建智能停车系统
  2. jenkins+findbugs+checkstyle+PMD静态代码检查(二)
  3. Caffe代码导读(4):数据集准备
  4. 让Bootstrap 3兼容IE8浏览器
  5. 一文说说这十多年来计算机玩摄影的历史
  6. SAP CRM里使用BAdI阻止产品主数据保存的一种办法
  7. jdk8 cms g1gc_G1 vs CMS vs平行GC
  8. slice深拷贝数组
  9. sprintf函数实现_从Go结构成员的升格到面向对象类的实现
  10. mysql cast和convert函数
  11. Excel怎么求和?5大常用的Excel求和公式
  12. win10中linux文件夹重命名,Win10家庭版重命名Administrator用户文件夹
  13. 制作WindowsServer2008镜像上传到OpenStack
  14. 微信php echo换行,微信小程序文字显示换行问题
  15. WIN10电脑升级显卡驱动后变慢不少
  16. jq ajax简单使用方法
  17. C语言指针(二重指针)
  18. MATLAB输出格式控制 %d,%f,%c,%s的用法
  19. SAP770系统FI模块配置(配置会计科目表)
  20. LINE FRIENDS 跨界李宁推出联名系列

热门文章

  1. ajax怎样示范事件,Ajax事件,方法
  2. Dataguard基本简介及三大保护模式介绍
  3. 媲美5G的Wifi网速、“备战”资产一键领……揭秘双11小二背后的保障力量
  4. 用java写一个四则运算计算器
  5. 苹果备忘录丢失如何恢复,小编支招教你轻松搞定
  6. Python 爬取表情包-斗图不会输在起跑线
  7. [Mysql] TRIM函数 | RTRIM函数 | LTRIM函数
  8. 前端面试题干货汇总(超详细)
  9. 2013.10.30 当着众人面批评一位员工
  10. 解析单句sql_单句SQL语句的解析方案。