sort包解读
一维数组排序
func main() {
a := []int{4, 3, 2, 1, 5, 6}
sort.Sort(sort.IntSlice(a)) //正序
sort.Sort(sort.Reverse(sort.IntSlice(a))) //倒序
}
二维数组排序:
我们给定一个排序规则:安装第index列大小进行排序,当第index列出现值相等时,参照index+1列。
package main
import (
"fmt"
"sort"
)
type IntArray struct {
array [][]int
firstnum int
}
func (arr *IntArray) Len() int {
return len(arr.array)
}
func (arr *IntArray) Swap(i, j int) {
arr.array[i], arr.array[j] = arr.array[j], arr.array[i]
}
func (arr *IntArray) Less(i, j int) bool {
arr1 := arr.array[i]
arr2 := arr.array[j]
for index := arr.firstnum; index < len(arr.array); index++ {
if arr1[index] < arr2[index] {
return true
} else if arr1[index] > arr2[index] {
return false
}
}
return i < j
} //自定义排序方法
func ArraySort(array [][]int, first int) [][]int {
arr := &IntArray{array, first}
sort.Sort(arr)
return arr.array
}
func main() {
nums := [][]int{{1, 9, 5}, {2, 3, 6}, {3, 6, 9}, {1, 8, 3}}
firIndex := 2
result := ArraySort(nums, firIndex-1)
fmt.Println(result)
}
//输出[[2 3 6] [3 6 9] [1 8 3] [1 9 5]]
//另一种写法
func main() {
nums := [][]int{{1, 9, 5}, {2, 3, 6}, {3, 6, 9}, {1, 8, 3}}
firIndex := 2
sort.Slice(nums, func(i, j int) bool {
arr1 := nums[i]
arr2 := nums[j]
for index := firIndex - 1; index < len(nums); index++ {
if arr1[index] < arr2[index] {
return true
} else if arr1[index] > arr2[index] {
return false
}
}
return i < j
})
fmt.Println(nums)
}
结构体排序
package main
import (
"fmt"
"sort"
)
type User struct {
Name string
Age int
}
func main() {
member := []User{
{"zyj", 22},
{"zyj0", 21},
{"zyj1", 23},
}
sort.Slice(member, func(i, j int) bool {
return member[i].Age < member[j].Age
})
fmt.Println(member)
}