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方法来排序
posted @ 2018-04-20 18:47  Joestar  阅读(278)  评论(0编辑  收藏  举报