go语言sort排序包的使用

对于排序,go语言的sort包里提供有丰富的接口,内置有3个类型的排序接口,sort.Float64s,sort.Ints,sort.Strings分别对应的浮点数,整数,字符串切片的排序。还有一个Slice函数,定义如下:func Slice(slice interface{}, less func(i, j int) bool),只需传入一个要排序的切片,一个回调函数即可。

使用范例如下:

package main

import (
	"fmt"
	"sort"
)

type Student struct {
	Id   int
	Name string
}

//因为[]Student切片不能创建接口,所以要专门定义一个类型StuL,使用结构体指针切片的好处是传递结构体指针,效率更高。
type StuL []*Student

func (s StuL) comp(i, j int) bool {//定义一个排序函数
	if s[i].Id != s[j].Id {//先按Id排序
		return s[i].Id < s[j].Id
	}
	return s[i].Name < s[j].Name//再按Name排序
}

func main() {

	// 准备3个切片
	fls := []float64{5.23, 11.4, 5.12, 9.35, 3.9}	
	ints := []int{22, 11, 5, 19, 37}
	names := []string{"ssd", "zd", "23z", "ab"}
	// sort 包中内建的3个类型排序接口
	sort.Float64s(fls)
	sort.Ints(ints)
	sort.Strings(names)
	// range遍历切片
	for _, v := range fls {
		fmt.Printf("%v\t", v)
	}
	fmt.Println("")	
	for _, v := range names {
		fmt.Printf("%v\t", v)
	}
	fmt.Println("")		
	for _, v := range ints {
		fmt.Printf("%v\t", v)
	}
	fmt.Println("")	
	//当是结构体类型排序时,需要定义一个切片,创建一个排序回调函数,再使用Slice函数。
	stus := StuL{{23, "and"}, {8, "zz"}, {8, "ywe2"}, {8, "bench"}, {11, "ssz"}, {5, "aa"}}
	//sort.Slice() 函数只要求传入需要排序的数据,以及一个排序时对元素的回调函数,类型为 func(i,j int)bool	
	sort.Slice(stus, stus.comp)
	for _, v := range stus {
		fmt.Printf("%v\t", v)
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值