给定一个包含三个文件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。有什么建议吗?
答案 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