Golang 结构体切片排序

作者: adm 分类: go 发布时间: 2022-08-24

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

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!