go 结构体排序的几种方法

该博客展示了如何使用Go语言对自定义类型进行排序,包括通过重载`Len()`,`Swap()`和`Less()`函数实现排序,以及利用`sort.Slice()`函数传入比较函数进行排序。同时,它还演示了如何检查排序结果的正确性。示例中对Person类型的切片按学费和年龄进行了排序,并验证了排序的准确性。
摘要由CSDN通过智能技术生成

简言

1. 方法1:重载三个函数,Len(), Swap(), Less(),其中Less()函数中写比较函数

2. 方法2:sort.Slice(), 传入一个匿名的比较函数

 

实验如下图

代码如下

package main
import (
	"fmt"
	"sort"
)

type Person struct {
	Name string    // 姓名
	Age  int    // 年纪
	Price int // 学费
}

type PersonSlice [] Person
func (a PersonSlice) Len() int {    // 重写 Len() 方法
	return len(a)
}
func (a PersonSlice) Swap(i, j int){     // 重写 Swap() 方法
	a[i], a[j] = a[j], a[i]
}
func (a PersonSlice) Less(i, j int) bool {    // 重写 Less() 方法, 从大到小排序
	return a[i].Price < a[j].Price
}

func main() {
	people := [] Person{
		{"zhang san", 12, 20},
		{"li si", 30, 20},
		{"wang wu", 12,18},
		{"zhao liu", 26, 15},
	}
	fmt.Println("初始数组:\n",people)

	sort.Sort(PersonSlice(people))
	fmt.Println("按照学费从低到高排序的结果\n", people)

	// 按照年龄从低到高排序
	sort.Slice(people, func(i, j int) bool {
		return people[i].Age < people[j].Age
	})
	fmt.Println("按照年龄从低到高排序的结果\n",people)


	// 是否是根据学费从低到高排序
	bSorted:= sort.SliceIsSorted(people,func(i, j int) bool {
		return people[i].Price < people[j].Price
	})
	fmt.Println("是否是根据学费从低到高排序:", bSorted)
	// 是否是根据年龄从低到高排序
	bSorted= sort.SliceIsSorted(people,func(i, j int) bool {
		return people[i].Age < people[j].Age
	})
	fmt.Println("是否是根据年龄从低到高排序:", bSorted)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值