字母Dir.glob的结果

Jay*_*Jay 9 ruby-on-rails

在我的控制器中我有:

@files = Dir.glob("public/downloads/*")
Run Code Online (Sandbox Code Playgroud)

在我看来,我有:

<% @files.each do |f| -%>
    <p><%= f.split("#{RAILS_ROOT}/public/downloads/")%></p>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

如何按字母顺序排列结果?

re5*_*5et 26

你应该能够:

@files = Dir.glob("public/downloads/*").sort
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我发现当将应用程序推送到Heroku Dir.glob时,会产生一个不同于家中Mac上的排序数组.因此,排序结果对于让我的应用程序运行至关重要. (6认同)

小智 10

Dir.glob返回的数组顺序取决于您使用的操作系统,如文档所述.在大多数计算机上,这是您期望的顺序,但是例如在heroku上,顺序非常随意.

您可以通过链接sort到现有方法call(Dir.glob("public/downloads/*").sort)来对数组进行排序,这是第一个建议的答案.但是,如果多次使用该方法,则创建around别名以便Dir.glob始终返回有序数组可能更方便:

class Dir
  class << self
    alias :original_glob :glob

    def glob(*args)
      original_glob(*args).sort
    end
  end
end
Run Code Online (Sandbox Code Playgroud)