Go 排序:slices.SortFunc 返回的不是 bool
包名是 slices(复数)。比较函数返回负数、0、正数,用 cmp.Compare 最省事:
slices.SortFunc(ps, func(a, b Person) int {
return cmp.Compare(a.Age, b.Age)
})
// 多个字段:先按年龄,再按名字(cmp.Or 取第一个非 0 的结果)
slices.SortFunc(ps, func(a, b Person) int {
return cmp.Or(cmp.Compare(a.Age, b.Age), cmp.Compare(a.Name, b.Name))
})排序是原地的,没有返回值。想保留原顺序,先克隆:
c := slices.Clone(s)
slices.Sort(c)b := a 不行:它只复制了切片头(指针、长度、容量),底层数组还是同一个,排 b 就等于排 a。
数组要先 arr[:] 变成切片再排。