我正在尝试按日期对文件列表进行排序。我目前有一个文件路径的字符串数组,我需要按修改日期对它们进行排序。我试过以下,但运气不好。我真的不明白sort_by方法是如何工作的。
@files.sort_by {|filename| File.mtime(filename) }
修改
我也尝试将它们转换为日期并对它们进行排序。
@files.sort_by {|filename| DateTime.parse(File.mtime(filename).to_s) }
谢谢!
答案 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!
才能将已排序的集应用于原始集。