Skip to main content
 首页 » 编程设计

使用Golang sort包实现自定义排序

2022年07月19日142shangdawei

使用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包中实现的排序功能,同时介绍了如何针对复合结构的自定义排序函数实现。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/107904619
阅读延展