[TOC] ## sort 排序 ``` //学生成绩结构体 type StuScore struct { name string //姓名 score int //成绩 } type StuScores []StuScore //Len() func (s StuScores) Len() int { return len(s) } //Less():成绩将有低到高排序 func (s StuScores) Less(i, j int) bool { return s[i].score < s[j].score } //Swap() func (s StuScores) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func main() { stus := StuScores{ {"alan", 95}, {"hikerell", 91}, {"acmfly", 96}, {"leao", 90}, } //打印未排序的stus数据 fmt.Println("Default:\n\t",stus) //StuScores已经实现了sort.Interface接口,所以可以调用Sort函数进行排序 sort.Sort(stus) //判断是否已经排好顺序,将会打印true fmt.Println("IS Sorted?\n\t", sort.IsSorted(stus)) //打印排序后的stus数据 fmt.Println("Sorted:\n\t",stus) } ``` ## Reverse 反向排序 `sort.Reverse(stus) ` ## Ints / IntsAreSorted 对整数排序/判断是否排序 ``` s := []int{3, 7, 5, 3, 5, 1, 2} sort.Ints(s) fmt.Println(sort.IntsAreSorted(s)) /true fmt.Println(s) //[1 2 3 3 5 5 7] ``` //反序排序 `sort.Sort(sort.Reverse(sort.IntSlice(s))) ` ## Float64s / Float64sAreSorted 对浮点排序 / 判断排序是否成功 ``` s := []float64{3.4, 7.6, 5.8, 3.9, 5.4, 1.0, 2.0} sort.Float64s(s) fmt.Println(sort.Float64sAreSorted(s)) //[1 2 3.4 3.9 5.4 5.8 7.6] fmt.Println(s) //[1 2 3 3 5 5 7] ``` //反向排序 ``` s := []float64{3.4, 7.6, 5.8, 3.9, 5.4, 1.0, 2.0} sort.Sort(sort.Reverse(sort.Float64Slice(s))) fmt.Println(s)//[7.6 5.8 5.4 3.9 3.4 2 1] ``` ## Strings / StringsAreSorted 字符串排序 /判断是否排序