使用golang的sort包进行排序

这是在掘金的第一篇文章,以前一直在某书发文章,进来感受某书愈来愈很差了,想把文章 都搬到掘金来。
java

介绍

golang和java等语言同样,系统自带了一个排序方法,能够快速实现排序。废话很少说,先上栗子,再解释。
golang

package main

import (
	"fmt"
	"math/rand"
	"sort"
	"strconv"
)

func main() {
	oneArr := make([]*One, 10)
	for i := 0; i < 10; i++ {
		oneArr[i] = &One{
			Name: "name" + strconv.FormatInt(int64(i), 10),
			Num:  rand.Intn(1000),
		}
	}

	for _, v := range oneArr {
		fmt.Print(v, " ")
	}
	fmt.Println()
	sort.Sort(OneList(oneArr))
	for _, v := range oneArr {
		fmt.Print(v, " ")
	}
	fmt.Println()

}

type One struct {
	Num  int
	Name string
}

type OneList []*One

func (this OneList) Len() int {
	return len(this)
}
func (this OneList) Less(i, j int) bool {
	return this[i].Num < this[j].Num
}
func (this OneList) Swap(i, j int) {
	this[i], this[j] = this[j], this[i]
}
复制代码

运行结果

运行结果
实现从小到大排序

解释

使用type定义了一个 []*One 类型的OneList切片。OneLiit 实现Interface 这个接口 这个接口在sort 中定义,原型
bash

// A type, typically a collection, that satisfies sort.Interface can be
// sorted by the routines in this package. The methods require that the
// elements of the collection be enumerated by an integer index.
type Interface interface {
	// Len is the number of elements in the collection.
	Len() int
	// Less reports whether the element with
	// index i should sort before the element with index j.
	Less(i, j int) bool
	// Swap swaps the elements with indexes i and j.
	Swap(i, j int)
}
复制代码
  • Len() 函数 返回要排序的序列的长度
  • Less() 函数 返回排序须要的比较的规则,若是符合这个规则,就进行交换
  • Swap() 函数 进行排序的交换规则

OneList 重写这3个函数
函数

新建一个切片oneArr,随机填充数据,而后调用sort包中的Sort()函数,进行排序。
Sort()函数须要传递一个Interface 类型的参数。 使用强制类型转换把 oneArr 转换为Interface类型。
ui

sort包中 还有一个函数实现反向排序,sort.sort.Reverse()能够实现倒序排序
this

栗子 sort.Sort(sort.Reverse(OneList(oneArr))) 就能实现反向排序
结果: spa

实现从大到下排序

拓展

golang的sort包中为咱们定义了一些经常使用的排序类型code

  • type IntSlice []int int类型切片的排序
  • type Float64Slice []float64 float64 类型切片的排序
  • type StringSlice []string string 类型切片的排序

看一个应用栗子:orm

package main

import (
	"fmt"
	"math/rand"
	"sort"
)

func main() {
	one := make([]int, 10)
	for i := 0; i < 10; i++ {
		one[i] = int(rand.Int31n(1000))
	}
	fmt.Println(one)
	sort.Sort(sort.IntSlice(one))
	fmt.Println(one)

}
复制代码

运行结果:cdn

好了,先介绍到这里。

相关文章
相关标签/搜索