在`Dir.entries`中排序顺序

时间:2011-09-12 14:48:19

标签: ruby

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

4 个答案:

答案 0 :(得分:20)

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

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

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

答案 1 :(得分:11)

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

答案 2 :(得分:0)

扩展@ maerics'回答,下面忽略. && ..,基于正则表达式的过滤器,并根据需要选择最新文件。

    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}"

答案 3 :(得分:0)

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

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方法