【问题标题】:Alphabetize results of Dir.glob按字母顺序排列 Dir.glob 的结果
【发布时间】:2011-01-27 08:56:49
【问题描述】:

在我的控制器中,我有:

@files = Dir.glob("public/downloads/*")

在我看来,我有:

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

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你应该能够:

    @files = Dir.glob("public/downloads/*").sort
    

    【讨论】:

    • 谢谢。我发现当将应用程序推送到 Heroku Dir.glob 时,会产生与我在家的 Mac 上不同的排序数组。因此,对结果进行排序对于让我的应用程序运行至关重要。
    • OSX 用户在这里。这也适用于对编号文件进行排序,例如“test-1.jpg”、“test-2.jpg”、“prod-1.jpg”、“prod-2.jpg”等。
    【解决方案2】:

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

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

    class Dir
      class << self
        alias :original_glob :glob
    
        def glob(*args)
          original_glob(*args).sort
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      相关资源
      最近更新 更多