go切片排序(41)

2023年 7月 15日 85.4k 0

对所有切片排序请输入图片描述

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}]

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论