golang 切片排序

目录

方法1.匿名函数实现切片排序

方法2.接口实现切片排序


方法1.匿名函数实现切片排序

package main

import (
    "fmt"
    "sort"
)

type Person struct {
    Age int
}

func main() {
    //声明切片对象
    person := make([]*Person, 0)
    //添加值
    person = append(person, &Person{
        Age: 10,
    })
    person = append(person, &Person{
        Age: 2,
    })
    person = append(person, &Person{
        Age: 15,
    })
    person = append(person, &Person{
        Age: 29,
    })
    person = append(person, &Person{
        Age: 9,
    })
    fmt.Println("未排序:")
    for _, item := range person{
        fmt.Printf("Age: %d\n", item.Age)
    }
    //进行降序 i大于j 为降序
    sort.Slice(person, func(i, j int) bool {
        return person[i].Age > person[j].Age
    })
    fmt.Println("排序后-降序:")
    for _, item := range person{
        fmt.Printf("Age: %d\n", item.Age)
    }

    //进行升序 i < j
    sort.Slice(person, func(i, j int) bool {
        return person[i].Age < person[j].Age
    })
    fmt.Println("排序后-升序:")
    for _, item := range person{
        fmt.Printf("Age: %d\n", item.Age)
    }
}

结果

未排序:
Age: 10
Age: 2
Age: 15
Age: 29
Age: 9
排序后-降序:
Age: 29
Age: 15
Age: 10
Age: 9
Age: 2
排序后-升序:
Age: 2
Age: 9
Age: 10
Age: 15
Age: 29

方法2.接口实现切片排序

package main

import (
    "fmt"
    "sort"
)

type Man struct {
    Age int
}
//定义切片类型
type Mans []Man

//实现排序len函数
func (m Mans) Len() int {
    return len(m)
}
//进行升序 i大于j 为降序, i小于j 为升序
func (m Mans) Less(x, y int) bool {
    return m[x].Age > m[y].Age
}
//swap 进行位置置换
func (m Mans) Swap(x, y int) {
    m[x], m[y] = m[y], m[x]
}



func main() {
    //声明切片对象
    person := Mans{
    }
    //添加值
    person = append(person, Man{
        Age: 10,
    })
    person = append(person,Man{
        Age: 2,
    })
    person = append(person, Man{
        Age: 15,
    })

    fmt.Println("未排序:")
    for _, item := range person{
        fmt.Printf("Age: %d\n", item.Age)
    }
    sort.Sort(person)
    fmt.Println("IS Sorted:", sort.IsSorted(person))
    fmt.Println("排序后-降序:")
    for _, item := range person {
        fmt.Printf("Age: %d\n", item.Age)
    }
}

结果

未排序:
Age: 10
Age: 2
Age: 15
IS Sorted: true
排序后-降序:
Age: 15
Age: 10
Age: 2

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值