排序操作主要都在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])
}
}

Go基础之--排序和查找操作的更多相关文章

  1. python基础一 ------排序和查找算法

    插入排序; 假设数组长度为n,先从第二个元素开始,与前一个元素比较,之后将较小的元素    放在前面,现在前两个元素是有顺序的,这时取第三个元素,与前一个元素(也就是第二个)比较,较小的放在前面   ...

  2. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  3. SpringBoot JPA实现增删改查、分页、排序、事务操作等功能

    今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查.分页.排序.事务操作等功能.下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and ...

  4. MongoDB学习(查找文档和其他数据查找操作)

    理解Cursor对象和查询运算符 cursor对象 cursor对象相当于一个指针,可通过迭代它来访问MongdoDB数据库中的一组对象. 在使用 find() 方法查询时,返回的并非实际文档,而是一 ...

  5. java基础-数组的折半查找原理

    java基础-数组的折半查找原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让你写一个数组的查找功能,需求如下:在一个数组中,找一个元素,是否存在于数组中, 如果存在就返回 ...

  6. UVA.10474 Where is the Marble ( 排序 二分查找 )

    UVA.10474 Where is the Marble ( 排序 二分查找 ) 题意分析 大水题一道.排序好找到第一个目标数字的位置,返回其下标即可.暴力可过,强行写了一发BS,发现错误百出.应了 ...

  7. selenium基础(下拉菜单操作)

    selenium基础(下拉菜单操作) 非select/option元素: 1.触发下拉列表出现 2.等待下拉列表中的元素出现,然后进行选择元素即可. select/option元素: 下拉框操作-Se ...

  8. C++ 排序、查找的应用

    // order.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "string.h" #includ ...

  9. leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

随机推荐

  1. echarts自定义提示框数据

    tooltip: { trigger: "axis", axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: "line" // 默认为 ...

  2. 注意SSIS中的DT_NUMERIC类型转换为字符类型(比如DT_WSTR)时,会截断小数点前的0

    我们知道SSIS中有许多数据类型,如下图所示: 但是DT_NUMERIC这个类型有个陷进要注意,我们来做个实验,随便定义一个String类型的SSIS包变量,然后打开该变量表达式窗口: 在变量表达式窗 ...

  3. 在Ubuntu虚拟机搭建数据库系统

    连接数据库: mysql -uroot -p 输入数据库密码即可登陆. 查看mysql版本信息: mysql> select version(); +---------------------- ...

  4. 读懂_countof,可以懂得什么

    在c++开发中数组是我们经常使用存储结构,而于此同时"数组越界"是每个c++程序员不能不提防陷阱. 还好,我们有预定义宏_countof. 一.在visual c++开发环境下,它 ...

  5. 从零开始学习前端JAVASCRIPT — 3、JavaScript基础string字符串介绍

    1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 基本数据类型:var sStr = '字符串'; 对象的方法:var oStr = n ...

  6. Java客户端API

    添加依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookee ...

  7. QT5 Thread线程

    QT5 Thread线程继承QThread方式 一.首先分析一下 QTimer Class与 Sleep()函数之间的秘密 QTimer *t = new QTimer(*parent); //创建Q ...

  8. Servlet--ServletInputStream类,ServletOutputStream类

    ServletInputStream类 定义 public abstract class ServletInputStream extends InputStream 这个类定义了一个用来读取客户端的 ...

  9. Oracle 视图 (待更新, 缓存)

    参考: 视图.索引.存储过程优缺点: http://www.cnblogs.com/SanMaoSpace/p/3147059.html oracle视图总结(转):http://tianwei013 ...

  10. 学会用git真的很重要

    一.首先,作为一名开发人员,目前个人菜鸟一个,觉得有个仓库来管理好自己的项目是真的很重要,而目前个人认为在git上面管理自己的项目是真的很不错的推荐,接下来给大家介绍一下如何使用git上传.管理自己的 ...