自定义排序
在 Go 中使用自定义函数进行排序,我们需要实现
sort.Interface
接口的Len
、Less
和Swap
方法, 这样我们就可以使用 sort 包的通用 Sort 方法了
package main
import (
"fmt"
"sort"
)
type byLength []string
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() {
// go内建排序方法
strs := []string{"b", "c", "a"}
sort.Strings(strs)
fmt.Println("strs sorted:", strs)
fruits := []string{"oragen", "banana", "apple", "kiwi"}
fmt.Println("origin:", fruits)
sort.Sort(byLength(fruits))
fmt.Println("sorted:", fruits)
}
Len 和 Swap 在各个类型中的实现都差不多, Less 将控制实际的自定义排序逻辑。 在这个的例子中,我们想按字符串长度递增的顺序来排序, 所以这里使用了 len(s[i]) 和 len(s[j]) 来实现 Less。