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}]