Golang 结构体切片排序
使用 sort.SliceStable(),在排序切片时会保留相等元素的原始顺序。
按照年龄升序排序的示例
func main() {
slStdnt := []struct {
Name string
Age int
Height int
}{
{"Alice", 23, 175},
{"David", 18, 185},
{"Eve", 18, 165},
{"Bob", 25, 170},
}
// 用 age 排序,年龄相等的元素保持原始顺序
sort.SliceStable(slStdnt, func(i, j int) bool {
return slStdnt[i].Age < slStdnt[j].Age
})
fmt.Println(slStdnt)
}
运行输出:
[{David 18 185} {Eve 18 165} {Alice 23 175} {Bob 25 170}]
如果想要在年龄相等的情况下再按照身高排序,我们修改一下比较器即可。
// 优先按照年龄排,年龄相等的话再按照身高排
sort.SliceStable(slStdnt, func(i, j int) bool {
if slStdnt[i].Age < slStdnt[j].Age {
return true
}
if slStdnt[i].Age > slStdnt[j].Age {
return false
}
return slStdnt[i].Height < slStdnt[j].Height
})
运行输出:
[{Eve 18 165} {David 18 185} {Alice 23 175} {Bob 25 170}]

