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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值