使用Golang sort包实现自定义排序
排序是每个程序员在工作比做的工作之一,有很多排序算法供你选择,通常我们会利用开发包提供的实现。本文学习使用sort包中的排序实现,在此基础上自定义排序函数实现对组合数据结构排序。
1. 简单排序示例
下面实现一个简单排序应用,可以对不同类型数组进行排序。
package main
import (
"fmt"
"sort"
)
func main() {
fmt.Println("Go Sorting Tutorial")
myInts := []int{1,3,2,6,3,4}
fmt.Println(myInts)
// we can use the sort.Ints
sort.Ints(myInts)
fmt.Println(myInts)
}
这里使用Ints方法,另外还要Float64s和Strings等用于对不同类型数组进行排序。
2. 自定义排序函数
本节我们介绍如何实现对复杂数据类型的排序。要实现自定义排序函数,首先定义该类型的数组。
下面示例对Progrmmer
类型数组进行排序,主要依据Age
特征字段。我们先定义类型[]Programmer
,取名为byAge
,即根据年龄进行排序,同时对其定义三个方法。
Len()
- 返回数组项的个数Swap()
- 在排序数组中交换两个元素的位置Less()
-i
位置的元素是否小于位置j
的元素,返回布尔类型
package main
import (
"fmt"
"sort"
)
type Programmer struct {
Age int
}
type byAge []Programmer
func (p byAge) Len() int {
return len(p)
}
func (p byAge) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
func (p byAge) Less(i, j int) bool {
return p[i].Age < p[j].Age
}
func main() {
programmers := []Programmer{
Programmer{Age: 30,},
Programmer{Age: 20,},
Programmer{Age: 50,},
Programmer{Age: 1000,},
}
sort.Sort(byAge(programmers))
fmt.Println(programmers)
}
我们只需要把 Programmer
类型数组转成 byAge
类型即能排序;执行返回结果为:
[{20} {30} {50} {1000}]
3. 总结
本文介绍了 sort
包中实现的排序功能,同时介绍了如何针对复合结构的自定义排序函数实现。