介绍go中的排序和通过函数排序
Sorting
Go 的 slices 包实现了内置类型和用户自定义类型的排序。我们先来看内置类型的排序。
sorting.go1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main
import ( "fmt" "slices" )
func main() { strs := []string{"c", "a", "b"} slices.Sort(strs) fmt.Println("Strings:", strs)
ints := []int{7, 2, 4} slices.Sort(ints) fmt.Println("Ints: ", ints)
s := slices.IsSorted(ints) fmt.Println("Sorted: ", s) }
|
log1 2 3 4
| $ go run sorting.go Strings: [a b c] Ints: [2 4 7] Sorted: true
|
Sorting by Functions
有时,我们需要对一个集合进行排序,而不是按照其自然顺序。例如,假设我们想按字符串的长度排序,而不是按字母顺序排序。下面是 Go 中自定义排序的一个示例。
sorting-by-functions.go1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package main
import ( "cmp" "fmt" "slices" )
func main() { fruits := []string{"peach", "banana", "kiwi"}
lenCmp := func(a, b string) int { return cmp.Compare(len(a), len(b)) }
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(people, func(a, b Person) int { return cmp.Compare(a.age, b.age) }) fmt.Println(people) }
|
log1 2 3
| $ go run sorting-by-functions.go [kiwi peach banana] [{TJ 25} {Jax 37} {Alex 72}]
|
参考链接