golang 中 ioutil.ReadDir 的结果进行自定义排序
clq
浏览(514) -
2018-01-13 12:25:25 发表
编辑
关键字: golang
golang 中 ioutil.ReadDir 的结果进行自定义排序
golang 中可以用 ioutil.ReadDir 读取一个目录下的所有文件名. 令人惊奇的是有人声称这个结果是经过排序的,我用 liteide 跳转到源码看了,确实是如此.
代码非常的简单.
--------------------------------------------------
// byName implements sort.Interface.
type byName []os.FileInfo
func (f byName) Len() int { return len(f) }
func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }
func (f byName) Swap(i, j int) { f[i], f[j] = f[j], f[i] }
// ReadDir reads the directory named by dirname and returns
// a list of directory entries sorted by filename.
func ReadDir(dirname string) ([]os.FileInfo, error) {
f, err := os.Open(dirname)
if err != nil {
return nil, err
}
list, err := f.Readdir(-1)
f.Close()
if err != nil {
return nil, err
}
sort.Sort(byName(list))
return list, nil
}
--------------------------------------------------
根据这个原理可以非常容易的写出按文件名的倒序函数,如下
//--------------------------------------------------
//直接来自 ioutil 的排序代码
// byName implements sort.Interface.
type byName []os.FileInfo
func (f byName) Len() int { return len(f) }
//func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }
func (f byName) Less(i, j int) bool { return f[i].Name() > f[j].Name() } //改一个符号就可以变成倒序
func (f byName) Swap(i, j int) { f[i], f[j] = f[j], f[i] }
//--------------------------------------------------
然后这样用
sort.Sort(byName(fileList));
举一反三,大家很容易写出按日期等排序的代码... golang 的这个设计真是又巧妙又简单.
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.