Go 结构体数组多字段排序

代码参考,官方文档,看到很多多余操作的文章,所以想记录一下笔记。

type Result struct {
	Score        int64   // 得分
	SpendTime    int64   // 消耗时间/秒
	CorrectCount int64   // 答对题数
}

func Test_List_Sort(t *testing.T) {
	
	// 结构体数组 依此按照 得分最高-消耗时间最少-答对题数最多排序
	// 得分相同,对比消耗时间最少
	// 消耗时间相同,对比答对题数最多
	list := []Result{
		{Score: 12, SpendTime: 61, CorrectCount: 5},
		{Score: 20, SpendTime: 15, CorrectCount: 7},
		{Score: 20, SpendTime: 3, CorrectCount: 7},
		{Score: 20, SpendTime: 15, CorrectCount: 3},
		{Score: 12, SpendTime: 13, CorrectCount: 3},
		{Score: 15, SpendTime: 16, CorrectCount: 5},

	}

	// [{12 61 5} {20 15 7} {20 3 7} {20 15 3} {12 13 3} {15 16 5}]
	t.Logf("排序前:%v\n\n", list)

	sort.Slice(list, func(i, j int) bool {
		if list[i].Score != list[j].Score {
			return list[i].Score > list[j].Score
		}
		if list[i].SpendTime != list[j].SpendTime {
			return list[i].SpendTime < list[j].SpendTime
		}
		return list[i].CorrectCount > list[j].CorrectCount
	})

	// [{20 3 7} {20 15 7} {20 15 3} {15 16 5} {12 13 3} {12 61 5}]
	t.Logf("排序后:%v\n\n", list)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值