Golang中如何对[]int32进行排序

Golang中如何对[]int32进行排序 如何对32位整数切片进行排序?我知道"sort"包中的Ints方法,但遗憾的是它只接受int类型的切片。

// 示例代码将在此处展示排序方法
6 回复

太棒了,这个方法我得记下来!它本可以在我几个项目里帮我节省大量代码行数……

更多关于Golang中如何对[]int32进行排序的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这实际上是一个相对较新的功能!从1.8版本开始支持 https://golang.org/doc/go1.8#sort_slice

通过封装一个非常简单的类型,然后为该类型实现 sort.Interface

https://play.golang.org/p/o1Jb-hIQXLI

这种方法可以正常工作,但更符合 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更为简洁,第二种方法在性能要求较高的场景下可能更优。

回到顶部