Ruby-从浅层到深层获取目录中的所有文件

Ruby-从浅层到深层获取目录中的所有文件,ruby,Ruby,借助Dir的魔力,我可以获得目录中的所有文件: Dir['lib/**/*.rb'] => ["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"] 但我想把它们从浅到深进行迭代。i、 e.a.rb->b.rb->c.rb 有什么建议吗?好吧,你可以根据斜杠的数量对它们进行排序,这可能不是很有效,但很容易: ["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"].sort_by { |s| s.count(

借助
Dir
的魔力,我可以获得目录中的所有文件:

Dir['lib/**/*.rb']
=> ["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"]
但我想把它们从浅到深进行迭代。i、 e.
a.rb
->
b.rb
->
c.rb


有什么建议吗?

好吧,你可以根据斜杠的数量对它们进行排序,这可能不是很有效,但很容易:

["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"].sort_by { |s| s.count('/') }
#=> ["lib/a.rb", "lib/foo/b.rb", "lib/foo/bar/c.rb"]
或者使用
group_by
并获取每个目录级别的文件数组:

["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"].group_by { |s| s.count('/') }
#=> {1=>["lib/a.rb"], 3=>["lib/foo/bar/c.rb"], 2=>["lib/foo/b.rb"]}

嗯,您可以按斜杠的数量对它们进行排序,这可能不是很有效,但很容易:

["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"].sort_by { |s| s.count('/') }
#=> ["lib/a.rb", "lib/foo/b.rb", "lib/foo/bar/c.rb"]
或者使用
group_by
并获取每个目录级别的文件数组:

["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"].group_by { |s| s.count('/') }
#=> {1=>["lib/a.rb"], 3=>["lib/foo/bar/c.rb"], 2=>["lib/foo/b.rb"]}