Go by Example: Sorting by Functions

英文源地址
有时, 我们想要按自然顺序以外的方式对集合进行排序. 例如, 假设我们希望按字符串长度而不是字母顺序排序. 下面是一个Go中自定义排序的例子.

package main

import (
	"fmt"
	"sort"
)

// 为了在Go中按自定义函数排序, 我们需要一个相应的类型
// 这里我们创建了一个byLength类型, 它只是内置的[]string类型的别名
type byLength []string

// 我们实现sort.Interface接口中需要的方法Len, Less和Swap,在我们自己的类型上
// 以便我们可以使用sort包的泛型Sort函数.
// Len和Swap在不同的类型之间通常是相似的, Less将保留实际的自定义排序逻辑.
// 在我们的例子中, 我们希望按照字符串长度递增的顺序排序, 所以我们在这里使用len(s[i])和len(s[j])

func (s byLength) Len() int {
    
    
	return len(s)
}

func (s byLength) Swap(i, j int) {
    
    
	s[i], s[j] = s[j], s[i]
}

func (s byLength) Less(i, j int) bool {
    
    
	return len(s[i]) < len(s[j])
}

func main() {
    
    
	// 所有这些就绪后, 我们现在可以通过将原始的fruits切片转换为byLength来实现自定义排序
	// 然后使用sort.Sort函数对输入的切片进行排序
	fruits := []string{
    
    "peach", "banana", "kiwi"}
	sort.Sort(byLength(fruits))
	fmt.Println(fruits)
}

运行我们的程序会显示一个按字符串长度排序的列表

$ go run sorting-by-functions.go 
[kiwi peach banana]

通过遵循创建自定义类型的相同模式, 在该类型上实现三个Interface方法, 然后调用sort.Sort对自定义类型的集合进行排序, 我们可以通过任意函数对Go切片进行排序.
下一节将介绍: Panic.

猜你喜欢

转载自blog.csdn.net/weixin_43547795/article/details/130874927
今日推荐