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
如下图:

Go基础之--排序和查找操作详解编程语言

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

Go基础之--排序和查找操作详解编程语言

从上图我们可以看出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]) 
    } 
}

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12392.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论