Go基础之--排序和查找操作
时间:2022-05-06
本文章向大家介绍Go基础之--排序和查找操作,主要内容包括常用的操作、特殊排序(也是接口的一个应用)、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
排序操作主要都在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])
}
}
- MySQL无法创建表的问题分析(r12笔记第73天)
- Golang语言社区--【H5游戏开发基础知识】JavaScript 用法
- Oracle中的PGA监控报警分析二(r12笔记第87天)
- Oracle 12c PDB的数据备份恢复(r12笔记第84天)
- MySQL和Oracle中唯一性索引的差别(r12笔记第83天)
- 如何用JavaScript进行数组去重
- Oracle 12.1升级到12.2的两种方法(r12笔记第92天)
- Oracle数据库重启后密码失效的问题(r12笔记第91天)
- Oracle和MySQL竟然可以这么写这样的SQL?(r12笔记第99天)
- Golang语言社区--了解C++ 用libcurl库进行http通讯网络编程
- Golang语言-- 小技巧
- MySQL Shell的简单介绍(r12笔记第95天)
- MYSQL索引条件下推的简单测试
- 教你如何用AST语法树对代码“动手脚”
- 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 数组属性和方法
- 【每周一库】 see - An HTTP server for hosting static files
- 【Rust日报】2020-07-17 无船同志新博客:Shipping Const Generics in 2020
- SpringCloud--Config Server配置中心学习总结
- 【Rust日报】2020-07-18 提升ARM64 Linux平台支持到Tier-1
- SpringCloud+MyBatis(oracle)逆向工程自动生成代码
- JDK1.8的几个简单Lambda表达式
- 腾讯云直播开发日记 (一) 直播播放和观看
- Docker六脉神剑(二) 使用Docker构建lnmp开发环境
- redis主从配置+集群搭建
- 【Ceph RGW】找一个用Go写的s3cmd
- 技术分享 | 如何优雅地在 Windows 上从 MySQL 5.6 升级到 5.7
- SpringCloud分布式配置中心
- Sharding-Proxy的基本功能使用
- React-Redux 对Todolist修改
- 快排解决寻找数组中的第K个最大元素