代码参考,官方文档,看到很多多余操作的文章,所以想记录一下笔记。
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)
}