Ruby:加入并排序文件名

时间:2014-01-12 14:19:08

标签: ruby sorting

我使用以下代码加入文件名:

Dir["tmp/#{file_prefix}-*"].join " "

其中file_prefix = foo

如果我有五个文件:

foo-83.pdf
foo-2.pdf
foo-52.pdf
foo-32.pdf
foo-43.pdf

输出将是未分类的:

foo-83.pdf foo-2.pdf foo-52.pdf foo-32.pdf foo-43.pdf

如何修改代码以获得排序结果?

2 个答案:

答案 0 :(得分:4)

使用Enumerable#sort_by尝试以下内容:

Dir["tmp/#{file_prefix}-*"].sort_by{|s| s[/\d+/].to_i }.join " "

ary = %w(foo-83.pdf foo-2.pdf foo-52.pdf foo-32.pdf foo-43.pdf)
ary.sort_by{|s| s[/\d+/].to_i }
# => ["foo-2.pdf", "foo-32.pdf", "foo-43.pdf", "foo-52.pdf", "foo-83.pdf"]

答案 1 :(得分:2)

是一个内置的排序功能。

Dir["tmp/#{file_prefix}-*"].sort.join " "

但是,这将按字面顺序排序,即100 > 99。为了避免这种情况,您可以使用sort

的块形式
Dir["tmp/#{file_prefix}-*"].sort {|a, b|
    a.scan(/\d+/)[0].to_i <=> b.scan(/\d+/)[0].to_i
}.join " "

您也可以使用sort_by,如@Arup的回答中所述。