Go基礎之--排序和查詢操作
阿新 • • 發佈:2018-12-11
排序操作主要都在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])
}
}