sort. SliceStable(s) 的demo
时间: 2024-02-09 11:10:00 浏览: 84
使用sortable进行拖动排序的demo
sort.SliceStable(s) 是 Go 语言中的一个函数,用于对切片进行稳定排序。它与 sort.Slice(s) 的不同之处在于,它保留了相等元素之间的原始顺序。
下面是一个示例代码,演示了如何使用 sort.SliceStable(s) 对一个结构体切片进行稳定排序:
```go
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
people := []Person{
{"Alice", 25},
{"Bob", 30},
{"Charlie", 25},
{"David", 20},
}
sort.SliceStable(people, func(i, j int) bool {
if people[i].Age == people[j].Age {
return people[i].Name < people[j].Name
}
return people[i].Age < people[j].Age
})
fmt.Println(people)
}
```
输出结果为:
```
[{David 20} {Alice 25} {Charlie 25} {Bob 30}]
```
在这个示例中,我们定义了一个结构体切片 people,其中每个元素都包含一个人的姓名和年龄。我们使用 sort.SliceStable(people) 函数对它进行排序。我们传递了一个 less 函数,这个函数接受两个参数 i 和 j,表示两个元素在切片中的位置。函数的返回值表示第 i 个元素是否应该排在第 j 个元素的前面。在这个示例中,我们使用人的年龄来定义元素之间的比较方式。如果两个人的年龄相同,则按照姓名的字典序来排序。
需要注意的是,sort.SliceStable(s) 函数同样会直接修改原始切片 s,而不是返回一个新的排序后的切片。因此,我们在排序之前最好先对原始切片进行备份,以免出现无法预料的问题。
阅读全文