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])
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏blackheart的专栏

[C#1] 7-枚举

1.Enum 枚举是定义了一组符号名称和数值对,如下: 1 //byte、sbyte、short、ushort、int、uint、long 或 ulong ...

230100
来自专栏marsggbo

jquery的html,text,val

.html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值。 这三个方法功能...

22450
来自专栏梦魇小栈

JQuery分析及实现part3之属性模块功能及实现

8930
来自专栏小筱月

vue 双向数据绑定原理

27720
来自专栏LEo的网络日志

go从已知列表中查找字符串

37670
来自专栏流柯技术学院

Java Selenium封装--RemoteWebElement

26120
来自专栏我的小碗汤

Go语言中数组和切片笔记

今天有位大佬问我一个关于切片很简单的一个问题,却把我难住了,所以是时候了解下切片的底层了。

10630
来自专栏Golang语言社区

Golang语言社区--标准库strings包讲解

大家好,我是Golang语言社区主编彬哥,本篇文章是给大家转载关于标准库strings包的知识。

975160
来自专栏Golang语言社区

Go语言类型转换库【github.com/demdxx/gocast】的用法

一、导入库: go get github.com/demdxx/gocast 二、测试代码: // main.go package main import ( ...

28690
来自专栏Hongten

python开发_python中字符串string操作

在python中,对于字符串string的操作,我们有必要了解一下,这样在我们的以后的开发中会给我们带来很多方便

11830

扫码关注云+社区

领取腾讯云代金券