按Ruby中修改的日期排序文件路径列表

时间:2011-11-09 21:12:45

标签: ruby io

我正在尝试按日期对文件列表进行排序。我目前有一个文件路径的字符串数组,我需要按修改日期对它们进行排序。我试过以下,但运气不好。我真的不明白sort_by方法是如何工作的。

@files.sort_by {|filename| File.mtime(filename) }

修改

我也尝试将它们转换为日期并对它们进行排序。

@files.sort_by {|filename| DateTime.parse(File.mtime(filename).to_s) }

谢谢!

2 个答案:

答案 0 :(得分:4)

您的第一个示例应该正常工作,但它只返回已排序的文件数组。如果您想更改变量,请尝试mutator sort_by!

@files.sort_by! {|filename| File.mtime(filename) }

答案 1 :(得分:4)

你所拥有的那条线正如你所期望的那样工作。我创建了四个文件,这是ls -lt的输出,它按修改时间对文件进行排序:

$ ls -t
2  3  4  1

您的示例输出:

@files = Dir.entries(Dir.pwd)
@files.sort_by { |file| File.mtime(file) }
=> ["2", ".", "3", "4", "1", ".."]

注意:按照惯例,任何集合中的方法都不会更改集合本身。您需要调用sort_by!才能将已排序的集应用于原始集。