排序操作主要都在sort包中,导入就可以使用了
import("sort")

常用的操作

sort.Ints:对整数进行排序
sort.Strings:对字符串进行排序
sort.Float64s:对浮点数进行排序

使用例子:

package main

import (
"sort"
"fmt"
) func main() {
// 对整数进行排序
var s = []int{2,3,5,10,20,1,0}
sort.Ints(s)
fmt.Println(s) //对字符串排序
var b = []string{"cc","yy","dd","ee","zz"}
sort.Strings(b)
fmt.Println(b) // 对浮点数排序
var d = []float64{9.1,1.2,3,2,1.9,2.2,10.1}
sort.Float64s(d)
fmt.Println(d)
}

同样还有以下几个常用的查找操作

sort.SearchInts(a[]int,b int):从整数切片a中查找b的索引位置
sort.SearchFloat64s(a[]float64,b float64):从浮点切片中查找b的索引位置
sort.Strings(a[]strings,b string):从字符切片中查找b的索引位置

使用例子如下:

package main

import (
"sort"
"fmt"
) func main() {
// 从有序的整数切片中获取某个整数所在的索引
var a = []int{1,2,3,4,5}
res := sort.SearchInts(a,2)
fmt.Println(res)
// 从有序的浮点数切片中获取某个浮点数的索引
var b = []float64{1.1,10.8,23.1,40.6,43.9}
res2 := sort.SearchFloat64s(b,43.9)
fmt.Println(res2) // 从有序的字符串切片中获取某个字符串的索引
var c = []string{"aa","bb","cc","dd"}
res3:= sort.SearchStrings(c,"cc")
fmt.Println(res3) }

特殊排序(也是接口的一个应用)

在sort包中对于基本数据类型如:int,float64,string等的排序都已经提供了上面提到的方法,但是对于特殊的数据类型,例如:map,struct等排序我们如何排序这里就需要用到sort.Sort方法
官网地址:https://golang.google.cn/pkg/sort/#Sort
如下图:

当我们点开Interface可以看到如下:

从上图我们可以看出Interface其实是一个接口类型,只要我们事先了文档中说的Len(),Less(i,j int)bool,Swap(i,j int)就实现了Interface这个接口,同样的我们就可以调用sort.Sort方法,通过下面的例子来理解

package main

import (
"fmt"
"math/rand"
"sort"
) type Student struct{
name string
age int
score float32
} type StudentSlice []*Student func(p StudentSlice)Len()int{
return len(p)
} func(p StudentSlice)Less(i,j int)bool{
return p[i].age > p[j].age
} func(p StudentSlice)Swap(i,j int){
p[i],p[j] = p[j],p[i]
} func main() {
var studentArr StudentSlice
for i:=0;i<10;i++{
var s = &Student{
name:fmt.Sprintf("赵%d",i),
age:rand.Intn(100),
score:rand.Float32()*100,
}
studentArr = append(studentArr,s)
}
fmt.Println("排序前:")
for i:=0;i<len(studentArr);i++{
fmt.Println(studentArr[i])
} sort.Sort(studentArr)
fmt.Println("排序后:")
for i:=0;i<len(studentArr);i++{
fmt.Println(studentArr[i])
}
}

最新文章

  1. java web学习总结(四) -------------------HTTP协议
  2. Nginx/Apache发大招
  3. C语言打印记事本内搜索字符串所在行信息
  4. iOS App 研发的最后冲刺:内测与部署
  5. WPF 窗体拖转时不触发MouseLeftButtonUpEvent
  6. 安装SQLServer2005错误无法在com+目录中安装和配置程序集
  7. JSBinding + SharpKit / 生成JavaScript绑定
  8. bzoj1264
  9. Android Studio使用教程图文详解
  10. Java[4] Jetty工作原理介绍(转)
  11. 1. Server.Transfer跳转页面抛出异常:正在终止线程
  12. HMAC-SHA1算法签名及Authorization头认证
  13. Android 音视频深入 十七 FFmpeg 获取RTMP流保存为flv (附源码下载)
  14. 开源框架SpringMvc和Struts2的区别
  15. Win#password;;processon #clone;;disassemble;;source find
  16. windows server 修改远程桌面连接端口号
  17. Spring获取bean工具类,可用于在线程里面获取bean
  18. jdk自带的jvisualvm-监控远程linux
  19. Vladik and cards CodeForces - 743E (状压)
  20. pthread_join与pthread_detach细节问题

热门文章

  1. 96、python version 3.6 required,which was not fount in the registry(python3.6安装scrapy)
  2. [学习OpenCV攻略][004][播放AVI视频]
  3. YUI 的模块信息配置优先级关系梳理
  4. 最大连接数:60 iops:150 什么概念?
  5. No input file specified的解决方法apache伪静态
  6. channelartlist|频道文档:
  7. Python3 的列表
  8. ObjectiveC 深浅拷贝学习
  9. 2017-06-28(passwd 主要组与附属组 gpasswd newgrp groups)
  10. awk打印第n个参数到最后一个技巧/将n行组成一列