我使用以下代码加入文件名:
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
如何修改代码以获得排序结果?
答案 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的回答中所述。