这篇文章将为大家详细讲解有关关于golang之排序的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
golang标准库实现了许多常用的排序方法,比如对整数序列排序:<代码> sort.Ints() 代码>,
那么如果对自定义的数据结构排序怎么做呢?
比如对一个用户列表,按他们的积分排序:
首先定义数据结构,为了能清楚说明问题,只给两个字段。
类型用户结构{ 名称字符串 分数int[]}类型用户用户
golang中想要自定义排序,自己的结构要实现三个方法:
//摘自:$ GOROOT/src/排序/排序。{gotype接口界面//Len是集合中元素的个数。 int Len ()//元素是否少报告//索引之前我应该元素索引j。 少(i, j int)保龄球//交换交换元素索引i和j。 交换(i, j int)}
这个设计太妙了有没有,想想我们学过的排序,都要序列长度,比大小,交换元素。
那对上述的用户,也就是用户列表如何使用golang的排序呢?
先按它说的,实现这三个方法:
func(美国用户)int Len () { 返回len(美国)}func(美国用户)少(i, j int) bool { 返回我们[我]。分数& lt;我们[j]。分数}func(美国用户)交换(i, j int) { 我们[我],[j]=[j],我们[我]}
然后就能排序了:
函数main () { var美国用户const N=6 我:=0;我& lt;N;我+ + { 我们=append(我们用户{ 名称:“user"+ strconv.Itoa(我), 得分:兰德。Intn (N * N), }) } fmt.Printf (“% v \ n",我们) sort.Sort(美国) fmt.Printf (“% v \ n",我们)}
可能的输出为:
[{user0 5} {user1 15} {user2 11} {user3 11} {user4 13} {user5 6}]
引用>
[{user0 5} {user5 6} {user2 11} {user3 11} {user4 13} {15} user1)可以看的到,分数从小到大排列了。
不过一般我们积分这种东西都是从大到小排序的,只需将
<代码> sort.Sort(美国)> 代码改成<代码> sort.Sort (sort.Reverse(美国))> 代码就行。确实很方便。
当然,如果出于特殊需要,系统提供的排序不能满足我们的需要,
还是可以自己实现排序的,比如针对上述,自己来排序(从小到大):func myqsort (int[]的用户,瞧,嗨){ 如果罗& lt;嗨,{ 主:=分区(瞧,我们嗨) myqsort(美国,lo, pivot-1) myqsort(主+ 1,我们嗨) }}func分区(int[]的用户,瞧,嗨)int { tmp:=我们(lo) lo & lt;嗨,{ lo & lt;嗨,,我们(你好)。分数在=tmp。分数{ 你好, } 我们(lo)=(你好) lo & lt;嗨,,我们(lo)。分数& lt;=tmp。分数{ lo + + } 我们[嗨]=(lo) } 我们(lo)=tmp返回嗨}一个简单的快速排序,调用时只需要<代码> myqsort(美国)> 代码就可以了。
关于关于golang之排序的使用方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。
关于golang之排序的使用方法