在Golang中排序可以使用标准库中的sort包。
基本排序对int的从小到大排序
arr := []int{1, 3, 5, 7, 9, 2, 4, 6, 8, 0}
sort.Ints(arr)
fmt.Println(arr)
输出:[0 1 2 3 4 5 6 7 8 9]
对float的从小到大排序
arr := []float64{1.1, 3.3, 5.5, 7.7, 9.9, 2.2, 4.4, 6.6, 8.8, 0.0}
sort.Float64s(arr)
fmt.Println(arr)
输出:[0 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9]
对字符串按照字典序排序
arr := []string{"abc", "a", "ee", "ff", "dd", "cc", "bb"}
sort.Strings(arr)
fmt.Println(arr)
输出:[a abc bb cc dd ee ff]
自定义排序
自定义排序的核心实现Len()、Less()和Swap()方法。
对int的从大到小排序
package main
import (
"fmt"
"sort"
)
type IntArray []int
func (self IntArray) Len() int {
return len(self)
}
func (self IntArray) Less(i, j int) bool {
return self[i] > self[j]
}
func (self IntArray) Swap(i, j int) {
self[i], self[j] = self[j], self[i]
}
func main() {
arr := []int{1, 3, 5, 7, 9, 2, 4, 6, 8, 0}
sort.Sort(IntArray(arr))
fmt.Println(arr)
}
对结构进行排序
如果要对一组学生的成绩排序(从大到小),我们可以这样写:
package main
import (
"fmt"
"sort"
)
type Student struct {
name string
score int
}
type StudentArray []Student
func (self StudentArray) Len() int {
return len(self)
}
func (self StudentArray) Swap(i, j int) {
self[i], self[j] = self[j], self[i]
}
func (self StudentArray) Less(i, j int) bool {
return self[i].score > self[j].score
}
func main() {
arr := []Student{
Student{"zhangsan", 60},
Student{"lisi", 88},
Student{"wangwu", 97},
Student{"zhaoliu", 54},
}
sort.Sort(StudentArray(arr))
fmt.Println(arr)
}