3 回答
TA贡献1852条经验 获得超1个赞
从 Go 1.8 开始,有一种更简单的方法可以对切片进行排序,而无需您定义新类型。您只需将匿名函数传递给该sort.Slice函数。
a := []int{5, 3, 4, 7, 8, 9}
sort.Slice(a, func(i, j int) bool {
return a[i] < a[j]
})
for _, v := range a {
fmt.Println(v)
}
这将按升序排序,如果您想要相反,只需a[i] > a[j]在匿名函数中编写即可。
TA贡献1876条经验 获得超7个赞
我在下面的回答是基于您从第三方包收到的切片是基本 Go 类型的假设。
要对基本类型的切片进行排序,请使用 sort 包实用程序。这是一个对字符串切片和 int 切片进行排序的示例。
package main
import (
"fmt"
"sort"
)
func main() {
sl := []string{"mumbai", "london", "tokyo", "seattle"}
sort.Sort(sort.StringSlice(sl))
fmt.Println(sl)
intSlice := []int{3,5,6,4,2,293,-34}
sort.Sort(sort.IntSlice(intSlice))
fmt.Println(intSlice)
}
上面的输出是:
[london mumbai seattle tokyo]
[-34 2 3 4 5 6 293]
去这里的 Go Playground自己试试吧。
有几点需要注意:
对基本 Go 类型进行排序不需要实现 Len() 等属于 sort.Interface 的函数。您只需要为复合类型采用该路线。
只需使用适当的接口方法提供程序(例如StringSlice、IntSlice或Float64Slice )包装基本类型的类型,然后进行排序。
切片是就地排序的,因此不会返回已排序切片的副本。
- 3 回答
- 0 关注
- 467 浏览
添加回答
举报
