Go语言使用sort包对任意类型元素的集合进行排序的方法

 更新时间:2015年02月08日 12:12:53   作者:books1958  
这篇文章主要介绍了Go语言使用sort包对任意类型元素的集合进行排序的方法,实例分析了sort排序所涉及的方法与相关的使用技巧,需要的朋友可以参考下

本文实例讲述了Go语言使用sort包对任意类型元素的集合进行排序的方法。分享给大家供大家参考。具体如下:

使用sort包的函数进行排序时,集合需要实现sort.Inteface接口,该接口中有三个方法:

复制代码 代码如下:
// Len is the number of elements in the collection. 
Len() int 
// Less reports whether the element with 
// index i should sort before the element with index j. 
Less(i, j int) bool 
// Swap swaps the elements with indexes i and j. 
Swap(i, j int)

以下为简单示例:

复制代码 代码如下:
//对任意对象进行排序 
type Person struct { 
    name string 
    age  int 

 
//为*Person添加String()方法,便于输出 
func (p *Person) String() string { 
    return fmt.Sprintf("( %s,%d )", p.name, p.age) 

 
type PersonList []*Person 
 
//排序规则:首先按年龄排序(由小到大),年龄相同时按姓名进行排序(按字符串的自然顺序) 
 
func (list PersonList) Len() int { 
    return len(list) 

 
func (list PersonList) Less(i, j int) bool { 
    if list[i].age < list[j].age { 
        return true 
    } else if list[i].age > list[j].age { 
        return false 
    } else { 
        return list[i].name < list[j].name 
    } 

 
func (list PersonList) Swap(i, j int) { 
    var temp *Person = list[i] 
    list[i] = list[j] 
    list[j] = temp 

 
func interfaceTest0203() { 
    fmt.Println("------") 
    p1 := &Person{"Tom", 19} 
    p2 := &Person{"Hanks", 19} 
    p3 := &Person{"Amy", 19} 
    p4 := &Person{"Tom", 20} 
    p5 := &Person{"Jogn", 21} 
    p6 := &Person{"Mike", 23} 
 
    pList := PersonList([]*Person{p1, p2, p3, p4, p5, p6}) 
    sort.Sort(pList) 
    fmt.Println(pList) 
 
    /*output: 
    [( Amy,19 ) ( Hanks,19 ) ( Tom,19 ) ( Tom,20 ) ( Jogn,21 ) ( Mike,23 )] */ 
}

希望本文所述对大家的Go语言程序设计有所帮助。

相关文章

  • Golang WebSocket创建单独会话详细实例

    Golang WebSocket创建单独会话详细实例

    这篇文章主要给大家介绍了关于Golang WebSocket创建单独会话的相关资料,WebSocket 协议主要为了解决基于 HTTP/1.x 的 Web 应用无法实现服务端向客户端主动推送的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Golang实现http文件上传小功能的案例

    Golang实现http文件上传小功能的案例

    这篇文章主要介绍了Golang实现http文件上传小功能的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • golang log4go的日志输出优化详解

    golang log4go的日志输出优化详解

    log4go源于google的一项log工程,但官方已经停止维护更新,下面这篇文章主要给大家介绍了关于golang log4go的日志输出优化的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • Go语言 channel如何实现归并排序中的merge函数详解

    Go语言 channel如何实现归并排序中的merge函数详解

    这篇文章主要给大家介绍了关于Go语言 channel如何实现归并排序中merge函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • golang通过cgo调用C++库源码示例

    golang通过cgo调用C++库源码示例

    这篇文章主要给大家介绍了关于golang通过cgo调用C++库的相关资料,CGO是GO语言里面的一个特性,CGO属于GOLANG的高级用法,主要是通过使用GOLANG调用CLANG实现的程序库,需要的朋友可以参考下
    2024-02-02
  • 聊聊Golang的语言结构和变量问题

    聊聊Golang的语言结构和变量问题

    这篇文章主要介绍了Golang的语言结构和变量问题,在golang中定义变量的一般形式是使用 var 关键字,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • Go语言的io输入输出流方式

    Go语言的io输入输出流方式

    Go语言中,输入输出流的处理通过io库中的Reader和Writer接口来实现,Reader接口定义了Read方法,用于从流中读取数据到程序中,Writer接口定义了Write方法,用于将数据写入到底层的数据流中,这些接口被许多标准库的类型所实现
    2024-10-10
  • Go逃逸分析示例详解

    Go逃逸分析示例详解

    这篇文章主要为大家介绍了Go逃逸分析示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • GoLang jwt无感刷新与SSO单点登录限制解除方法详解

    GoLang jwt无感刷新与SSO单点登录限制解除方法详解

    这篇文章主要介绍了GoLang jwt无感刷新与SSO单点登录限制解除方法,JWT是一个签名的JSON对象,通常用作Oauth2的Bearer token,JWT包括三个用.分割的部分。本文将利用JWT进行认证和加密,感兴趣的可以了解一下
    2023-03-03
  • 利用systemd部署golang项目的实现方法

    利用systemd部署golang项目的实现方法

    这篇文章主要介绍了利用systemd部署golang项目的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论