这是在掘金的第一篇文章,以前一直在某书发文章,进来感受某书愈来愈很差了,想把文章 都搬到掘金来。
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
好了,先介绍到这里。