040_使用函数自定义排序
代码演示:
package main import "fmt" import "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() { fruits := []string{"peach", "banana", "kiwi"} sort.Sort(ByLength(fruits)) fmt.Println(fruits) }
代码运行结果:
[kiwi peach banana]
代码解读:
- 有时候,我们排序是按照自定义方式来排序的。实现自定义排序需要实现sort接口的Len,Less和Swap方法
- 这样就可以用到sort包的通用方法Sort来实现自定义排序了
- Len和Swap方法的实现在不同的类型之间大致都是相同的,只有Less方法包含了自定义的排序逻辑,本例中以字符串长度升序排序
- 本例中,为了给内置的字符串切片排序,所以定义了ByLength类型,最终将fruits转换为了ByLength类型,然后使用Sort进行排序
- 为go的切片进行自定义排序的方法步骤为:1.实现自定义排序类型;2.实现sort包的Sort方法Len,Swap和Less;3.使用sort.Sort方法来排序