1. 先准备要排序的切片data
type User struct {
id int
name string
age int
sex int
phone string
}
var user User
var data []User
for i := 1; i <= 3; i++ {
user = User{
id: i,
name: string(rune(i + 96)),
age: 1,
sex: i % 2,
phone: string(rune(i+96)) + string(rune(i+96)),
}
data = append(data, user)
}
fmt.Println("排序前:", data)
/**
结果输出:
排序前: [{1 a 1 1 aa} {2 b 1 0 bb} {3 c 1 1 cc}]
*/
2. 使用sort库的Slice方法,可以进行自定义排序,也可以借此实现多重排序
//多重排序
sort.Slice(data, func(i, j int) bool {
//优先age正序排序,再进行sex倒序排序
if data[i].age != data[j].age {
return data[i].age < data[j].age
}
//再进行sex倒序排序
if data[i].sex != data[j].sex {
return data[i].sex > data[j].sex
}
//再进行id正序排序
return data[i].id < data[j].id
})
fmt.Println("排序后:", data)
/**
结果输出:
排序后: [{1 a 1 1 aa} {3 c 1 1 cc} {2 b 1 0 bb}]
*/
使用Slice方法,可以自定义的根据自己的切片元素去进行调整,且排序方式更为直观。
当然,直观的代价便是要写较多的代码,如果只是简单的切片排序,可以参考golang之切片与排序