随笔 - 446  文章 - 17 评论 - 3 阅读 - 14万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

基础方法调用

复制代码
package main

import (
    "fmt"
    "sort"
)

func main() {
    intList := [] int {2, 4, 3, 5, 7, 6, 9, 8, 1, 0}
    float8List := [] float64 {4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14}
    stringList := [] string {"a", "c", "b", "d", "f", "i", "z", "x", "w", "y"}

    sort.Sort(sort.Reverse(sort.IntSlice(intList)))
    sort.Sort(sort.Reverse(sort.Float64Slice(float8List)))
    sort.Sort(sort.Reverse(sort.StringSlice(stringList)))
    fmt.Printf("%v\n%v\n%v\n", intList, float8List, stringList)

}
复制代码

但是很多时候,基础的用法并不能再实际的开发中起到作用。这时我们就要从原理取分析和开发。

    需要实现 Len,Less,Swap,原因使用sort包进行排序识别时,需要定义sort.interface{}接口,而实现这个接口就要实现这三个方法
复制代码
package main

import (
    "fmt"
    "sort"
)

type Person struct {
    Name string    
    Age  int    
}

type PersonSlice [] Person

func (p PersonSlice) Len() int {    
    return len(p)
}
func (p PersonSlice) Swap(i, j int){     
    p[i], p[j] = p[j], p[i]
}
func (p PersonSlice) Less(i, j int) bool {    
    return p[j].Age < p[i].Age
}

func main() {
    people := [] Person{
        {"zhang san", 12},
        {"li si", 30},
        {"wang wu", 52},
        {"zhao liu", 26},
    }


    sort.Sort(PersonSlice(people))   
    fmt.Println(people)
    fmt.Println(sort.SliceIsSorted(people, func(i, j int) bool {
        return people[j].Age < people[i].Age
    }))
    sort.Sort(sort.Reverse(PersonSlice(people)))    
    fmt.Println(people)
    
}
复制代码

注意:从上面可以知道go的排序没有python实现那么顺滑,这里并不是说包的引用方面。而在比较方面。比如做字典按value进行排序的时候。对于sort包的实现就必须要求整个map要有同一个key。

 

 
posted on   topass123  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示