Golang语言为结构体排序

有很多的初学者可能对简单的数据的排序可以解决,一旦遇到复制结构的时候可能就束手无策了,今天给大家简单讲解下Go语言中结构体的排序。代码如下,代码是网上给大家找的一个例子,下面代码简单明了;后面大家如果遇到问题例如再上篇文章给大家讲过的并发安全的map的例子,可以增加个排序。

注:下面的代码仅仅是思路,实际项目中切忌map是类型不安全的,如果在高并发下,程序多数会直接挂掉。

package main



import (

        "fmt"

        "io/ioutil"

        "sort"

        "time"

)



type info struct {

        Name string

        Time time.Time

}

type newlist []*info



func main() {

        l, e := getFilelist("./")

        if e != nil {

                fmt.Println(e)

        }
 //调用标准库的sort.Sort必须要先实现Len(),Less(),Swap() 三个方法.

        sort.Sort(newlist(l))  

        for _, v := range l {

                fmt.Println("文件名:", v.Name, "修改时间:", v.Time.Unix())

        }

}



func getFilelist(path string) ([]*info, error) {

        l, err := ioutil.ReadDir(path)

        if err != nil {

                return []*info{}, err

        }

        var list []*info

        for _, v := range l {

                list = append(list, &info{v.Name(), v.ModTime()})

        }

        return list, nil

}



func (I newlist) Len() int {

        return len(I)

}

func (I newlist) Less(i, j int) bool {

        return I[i].Time.Unix() < I[j].Time.Unix()

}

func (I newlist) Swap(i, j int) {

        I[i], I[j] = I[j], I[i]

}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Django中文社区

基于类的通用视图:ListView 和 DetailView

在开发网站的过程中,有一些视图函数虽然处理的对象不同,但是其大致的代码逻辑是一样的。比如一个博客和一个论坛,通常其首页都是展示一系列的文章列表或者帖子列表。对处...

32670
来自专栏一“技”之长

Xcode中修改变量名、类名及字符串的替换操作

        在做iOS开发代码优化的工作时,优化代码结构之前,我们应该先整理好工程的外貌,将文件和类的命名进行规范,在Xcode中为我们提供了方便而强大的名...

9820
来自专栏大内老A

ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求

我们通过《以Web的形式发布静态文件》和《条件请求与区间请求》中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为Static...

33650
来自专栏前端下午茶

Vue源码阅读 - 批量异步更新与nextTick原理

vue已是目前国内前端web端三分天下之一,同时也作为本人主要技术栈之一,在日常使用中知其然也好奇着所以然,另外最近的社区涌现了一大票vue源码阅读类的文章,在...

18030
来自专栏大内老A

ASP.NET MVC路由扩展:链接和URL的生成

ASP.NET 路由系统通过注册的路由表旨在实现两个“方向”的路有功能,即针对入栈请求的路由和出栈URL的生成。前者通过调用代表全局路由表的RouteColle...

23870
来自专栏有趣的django

32.Django form组件

Form组件  Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面...

34990
来自专栏Python小屋

Python爬虫扩展库scrapy选择器用法入门(一)

关于BeutifulSoup4的用法入门请参考Python爬虫扩展库BeautifulSoup4用法精要,scrapy爬虫案例请参考Python使用Scrapy...

34750
来自专栏大内老A

通过一个模拟程序让你明白WCF大致的执行流程

在《通过一个模拟程序让你明白ASP.NET MVC是如何运行的》一文中我通过一个普通的ASP.NET Web程序模拟了ASP.NET MVC的执行流程,现在我们...

21960
来自专栏c#开发者

Asp.net Dynamic Data之四定义字段的显示/编辑模板和自定义验证逻辑

Asp.net Dynamic Data之四定义字段的显示/编辑模板和自定义验证逻辑 Asp.net Dynamic data提供了一些字段模板有比如在Det...

36750
来自专栏前端小作坊

原型链上的DOM Attributes

Chrome开发小组最近发表声明他们正在將DOM properties移动到原型链中。这个更新将会在Chrome 43(2015年4月发布beta版本)中实现。...

11730

扫码关注云+社区

领取腾讯云代金券