sort排序
sort排序
对象内排序
//age升序排列
sort.Slice(list, func(i, j int) bool {
return list[i].age< list[j].age
})
//age降序排列
sort.Slice(list, func(i, j int) bool {
return list[i].age> list[j].age
})
//age升序,num降序
sort.Slice(list, func(i, j int) bool {
if list[i].age == list[j].age {
return list[i].num > list[j].num
}
return list[i].age < list[j].age
})
字符串排序
方式一:
func reverse(str string) string {
var result string
strLen := len(str)
for i := 0; i < strLen; i++ {
result = result + fmt.Sprintf("%c", str[strLen-i-1])
}
return result
}
方式二:
func reverse2(str string) string {
var result []byte
tmp := []byte(str)
length := len(str)
for i := 0; i < length; i++ {
result = append(result, tmp[length-i-1])
}
return string(result)
}
方式三:
func reverse13(s string) string {
runes := []rune(s)
for from, to := 0, len(runes)-1; from < to; from, to = from+1, to-1 {
runes[from], runes[to] = runes[to], runes[from]
}
return string(runes)
}
切片排序
r := []int{5,2,6,10,3} // []int{}
sort.Ints(r) // 升序
sort.Sort(sort.IntSlice(r)) //升序
fmt.Println(r) // [2 3 5 6 10]
a := []float64{5.5, 2.2, 6.6, 3.3, 1.1, 4.4}
sort.Float64s(a) // 升序
sort.Sort(sort.Float64Slice(a)) // 升序
fmt.Println(a) // [1.1 2.2 3.3 4.4 5.5 6.6]
s := []string{"PHP", "golang", "python", "C", "Objective-C"}
sort.Strings(s) // 字母开头升序
sort.Sort(sort.StringSlice(s)) //字母开头升序
fmt.Println(s) // [C Objective-C PHP golang python]
逆序:
func reverse(s []int) []int {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
return s
}
func main() {
r := []int{5,2,6,10,3}
k:=reverse(r) // 逆序
fmt.Println(k) // [3 10 6 2 5]
sort.Ints(r) // 升序
fmt.Println(r) // [2 3 5 6 10]
k2:=reverse(r) // 逆序
fmt.Println(k2) // [10 6 5 3 2]
}
自定义排序
type User struct {
name string
age int
num int
}
type SortByUsers struct {
users
}
type users []*User
func (M users) Len() int {
return len(M)
}
func (M users) Swap(i, j int) {
M[i], M[j] = M[j], M[i]
}
//按age升序,num降序排
func (S SortByUsers) Less(i, j int) bool {
if S.users[i].age == S.users[j].age {
return S.users[i].num > S.users[j].num
}
return S.users[i].age < S.users[j].age // 按照 距离 升序排序
}
func main() {
list := []*User{
{name: "a", age: 1, num: 1},
{name: "a", age: 1, num: 10},
{name: "b", age: 3, num: 2},
{name: "b", age: 2, num: 2},
{name: "b", age: 4, num: 2},
}
sort.Sort(SortByUsers{list})
for _, v := range list {
fmt.Println(*v)
}
}
选择了IT,必定终身学习
posted @ Jeff的技术栈 阅读 (9999+) 评论 (99) 点赞(99) 编辑 MD 收藏
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人