根据不完整的文件名数组对文件进行排序

时间:2014-11-21 23:08:16

标签: ruby

给定一个包含三个文件fileA, fileB, fileC的目录,我可以创建一个我希望它们排序的数组的数组:

prio = [ "fileC", "fileA", "fileB" ]
#=> ["fileC", "fileA", "fileB"]
Dir.glob("*").sort_by { |i| [prio.index(i), i] }
#=> ["fileC", "fileA", "fileB"]

但是,我正在尝试按<0> :

Dir.glob("*").sort_by { |i| [prio.index(i), i] }
ArgumentError: comparison of Array with Array failed
from (irb):3:in `sort_by'
from (irb):3
from :0

我尝试使用if prio.include?(i)作为块内的条件,但后来我得到了:

  

TypeError:无法从(irb)转换为nil:4:在`&lt; =&gt;'

我使用的是ruby-1.8.7。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这看起来像是这样做的:

prio = %w[ fileC fileA fileB ]
files = %w[foo fileA bar fileB baz fileC]
prio_files = prio & files  # => ["fileC", "fileA", "fileB"]
non_prio = files - prio_files # => ["foo", "bar", "baz"]
process_order = prio_files + non_prio # => ["fileC", "fileA", "fileB", "foo", "bar", "baz"]

如果您希望将non_prio个文件排序,请使用:

process_order = prio_files + non_prio.sort

有关详细信息,请参阅数组的-&

答案 1 :(得分:1)

[编辑:我最初删除了我的答案,因为它与@ theTinMan基本相同,在我发布之前他已经发布了几分钟。但是,鉴于你的意见,我已经取消删除,只是为了明确说明你的观点。]

这样做你想要的吗?

all_files = Dir.glob("*")
prio & Dir.glob("*") + (all_files-prio).sort