在`Dir.entries`中排序顺序

是否存在Dir.entries返回结果的固定/默认排序顺序? 根据经验,我知道前两个条目是"."".."

根据Ruby语言文档, Dir.entries()不保证所列文件的任何特定顺序,因此如果您需要某些订单,最好自己明确地执行。

例如,如果需要按文件修改时间(从最旧到最新)排序,则可以执行以下操作:

 Dir.entries('.').sort_by { |x| File.mtime(x) } 

我认为没有默认的排序顺序,但您可以使用Dir.entries('some_path_to_dir').sort以ASC方式对它们进行排序。

扩展@maerics的答案,以下忽略. && .. . && .. ,基于正则表达式的filter,并根据需要选择最新文件。

  Dir.chdir(in_dir) target_file = Dir.entries(in_dir).select(|x| x != '.' && x != '..' && x =~ /\somefile.txt\z/).sort_by{|f|File.mtime(f)}.last(1) puts "here i am #{target_file}" 

对于可能带着同样怀疑来到这里的其他人。 一种只选择与正则表达式匹配的文件并且仍然能够按照您想要的方式对它们进行排序的方法是:

files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }.reverse

要么

files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }

取决于您希望文件排序的方式。

我不能使用Dir.entries方法做同样的事情