Golang中如何对[]int32进行排序
Golang中如何对[]int32进行排序 如何对32位整数切片进行排序?我知道"sort"包中的Ints方法,但遗憾的是它只接受int类型的切片。
// 示例代码将在此处展示排序方法
太棒了,这个方法我得记下来!它本可以在我几个项目里帮我节省大量代码行数……
更多关于Golang中如何对[]int32进行排序的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这实际上是一个相对较新的功能!从1.8版本开始支持 https://golang.org/doc/go1.8#sort_slice
通过封装一个非常简单的类型,然后为该类型实现 sort.Interface。
这种方法可以正常工作,但更符合 Go 语言习惯的做法(参考:https://gobyexample.com/sorting-by-functions)是这样的:
https://play.golang.org/p/VUi6dXWB13M
当你将切片强制转换为 byValue 类型时,对排序函数的调用看起来非常简洁:
sort.Sort(byValue(f))
使用sort.Slice的更简单解决方案:https://play.golang.org/p/9s_noUV5sDA
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
people := []Person{
{"Bob", 31},
{"John", 42},
{"Michael", 17},
{"Jenny", 26},
}
sort.Slice(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})
fmt.Println(people)
}
在Go语言中,要对[]int32切片进行排序,可以使用sort.Slice函数,它能够对任意类型的切片进行排序。以下是一个完整的示例:
package main
import (
"fmt"
"sort"
)
func main() {
// 创建一个int32切片
nums := []int32{42, 17, 8, 96, 23, 55}
// 使用sort.Slice进行排序
sort.Slice(nums, func(i, j int) bool {
return nums[i] < nums[j]
})
fmt.Println("排序后的切片:", nums)
// 输出: 排序后的切片: [8 17 23 42 55 96]
}
如果需要降序排序,只需修改比较函数:
sort.Slice(nums, func(i, j int) bool {
return nums[i] > nums[j]
})
如果需要对大型切片进行优化排序,也可以将[]int32转换为[]int,使用更高效的sort.Ints:
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int32{42, 17, 8, 96, 23, 55}
// 转换为int切片
intNums := make([]int, len(nums))
for i, v := range nums {
intNums[i] = int(v)
}
// 使用sort.Ints排序
sort.Ints(intNums)
// 转换回int32
for i, v := range intNums {
nums[i] = int32(v)
}
fmt.Println("排序后的切片:", nums)
}
第一种方法使用sort.Slice更为简洁,第二种方法在性能要求较高的场景下可能更优。

