对所有切片排序
9.1切片排序
- 示例
创建一个包含数组的切片
list := [][2]int{{1,3},{5,9},{4,7},{6,2},{0,8}}
排序的规则是使用每个元素的第二个元素(索引为1)比较大小
使用sort.Slice进行排序
Slice传入list,而后是一个匿名函数,索引为i和j,返回一个bool ,索引i和j是需要自己进行比较。如下
list[i][1] > list[j][1]
list中索引i第二个元素1进行比较,那分别就是{1,3},{5,9},{4,7},{6,2},{0,8}
中的,3,9,7,2,8进行排序
sort.Slice(list,func(i,j int)bool{
return list[i][1] > list[j][1]
})
代码块
package main
import (
"fmt"
"sort"
)
func main(){
list := [][2]int{{1,3},{5,9},{4,7},{6,2},{0,8}}
sort.Slice(list,func(i,j int)bool{
return list[i][1] > list[j][1]
})
fmt.Println(list)
}
运行
[root@linuxea.com /opt/Golang/work5]# go run sort.go
[[5 9] [0 8] [4 7] [1 3] [6 2]]
- 对结构体排序
9.2结构体排序
我们定义一个结构体,如下
type User struct {
Id int
Name string
Score float64
}
而后赋值给users,如下:
users := []User{{3,"m",6},{2,"a",5},{1,"r",7},{4,"k",8}}
使用sort.Slice
进行排序,在返回值上,使用.score排序score,score的值现在是6,5,7,8,排序后的结果是5,6,7,8
sort.Slice(users,func(i,j int)bool{
return users[i].Score < users[j].Score
})
如下:
package main
import (
"fmt"
"sort"
)
type User struct {
Id int
Name string
Score float64
}
func main(){
users := []User{{3,"m",6},{2,"a",5},{1,"r",7},{4,"k",8}}
sort.Slice(users,func(i,j int)bool{
return users[i].Score < users[j].Score
})
fmt.Println(users)
}
运行
[root@linuxea.com /opt/Golang/work5]# go run sort2.go
[{2 a 5} {3 m 6} {1 r 7} {4 k 8}]
我们还可以对id排序,修改成users[i].Id < users[j].Id
即可
package main
import (
"fmt"
"sort"
)
type User struct {
Id int
Name string
Score float64
}
func main(){
users := []User{{3,"m",6},{2,"a",5},{1,"r",7},{4,"k",8}}
sort.Slice(users,func(i,j int)bool{
return users[i].Id < users[j].Id
})
fmt.Println(users)
}
运行
[root@linuxea.com /opt/Golang/work5]# go run sort2.go
[{1 r 7} {2 a 5} {3 m 6} {4 k 8}]