有时候我们希望按照除了自然顺序以外的方式对集合进行排序。例如,假设我们想按字符串的长度而不是按字母顺序进行排序。以下是 Go 中自定义排序的一个例子。
package main
import (
"cmp"
"fmt"
"slices"
)
func main() {
fruits := []string{"peach", "banana", "kiwi"}
// 我们实现了一个用于字符串长度的比较函数。cmp.Compare 对此非常有帮助。
lenCmp := func(a, b string) int {
return cmp.Compare(len(a), len(b))
}
// 现在我们可以使用这个自定义比较函数调用 slices.SortFunc 来根据名称长度对水果进行排序。
slices.SortFunc(fruits, lenCmp)
fmt.Println(fruits)
// 我们可以使用相同的技巧对一组非内建类型的值进行排序。
type Person struct {
name string
age int
}
people := []Person{
Person{name: "Jax", age: 37},
Person{name: "TJ", age: 25},
Person{name: "Alex", age: 72},
}
// 使用 slices.SortFunc 按年龄对人员进行排序。
slices.SortFunc(people,
func(a, b Person) int {
return cmp.Compare(a.age, b.age)
})
fmt.Println(people)
}运行结果:
➜ go run sorting-by-functions.go
[kiwi peach banana]
[{TJ 25} {Jax 37} {Alex 72}]原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。