最近有个需求是要求对两个字段进行排序,如果用sql就比较简单 group by desc,但是效率会很低,所以在代码内实现,直接上代码,taskId 降序排序 policyId升序排序
type Member struct {
Id int
TaskId int
policyId int
}
type byIdSort []Member
func (members byIdSort) Len() int { return len(members) }
func (members byIdSort) Swap(i, j int) { members[i], members[j] = members[j], members[i] }
func (members byIdSort) Less(i, j int) bool {
//taskId 降序
if members[i].TaskId > members[j].TaskId {
return true
}
if members[i].TaskId < members[j].TaskId {
return false
}
//policyId 升序
return members[i].policyId < members[j].policyId
}
func main() {
m := []Member{
{1, 1, 1,
}, {
2, 1, 2,
}, {
3, 2, 3,
}, {
4, 3, 4,
},
}
sort.Sort(byIdSort(m))
for _, v := range m {
fmt.Println("v:", v.Id)
}
}
输出
v: 4
v: 3
v: 1
v: 2