linuxea:go切片排序(41)

对所有切片排序

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}]
0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2020-12-22分类: Golang

标签: Golang

发表评论