go 語言系列 排序和查找操作


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])
    }
}
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM