golang学习笔记--使用sort包对切片排序

目录

【1】数组切片排序

【2】对结构体切片进行排序


【1】数组切片排序

切片是引用类型,所以不需要其他变量接收返回值。

	//对数组切片进行排序
	intSlice := []int{10, -1, 6, -4, 0}
	sort.Ints(intSlice)

【2】对结构体切片进行排序

查看go语言标准库文档,使用sort.Sort()可以对结构体切片进行排序。 参数是一个接口,该接口里声明了 len()  Less()  Swap() 三个方法,所以我们要排序的结构体需要依次实现这三个方法。

package main

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

// 1.声明Hero结构体
type Hero struct {
	Name string
	Age  int
}

// 2.声明一个Hero结构体的切片
type HeroSlice []Hero

// 3.实现Interface接口
func (hs HeroSlice) Len() int {
	return len(hs)
}

// Less方法就是决定你是降序还是升序
// 1.按Hero的年龄从小到大升序
func (hs HeroSlice) Less(i, j int) bool {
	return hs[i].Age < hs[j].Age
}

func (hs HeroSlice) Swap(i, j int) {
	hs[i], hs[j] = hs[j], hs[i]
}

func main() {
	//对结构体切片排序
	var heroes HeroSlice
	for i := 0; i < 10; i++ {
		heroes = append(heroes, Hero{
			Name: fmt.Sprintf("英雄~%d", rand.Intn(100)),
			Age:  rand.Intn(100),
		})
	}
	for _, v := range heroes {
		fmt.Println(v)
	}
	fmt.Println("---------------排序前后对比---------------")
	sort.Sort(heroes)
	for _, v := range heroes {
		fmt.Println(v)
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值