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

时间:2012-06-25 20:57:47

标签: ruby

通过Dir的魔力,我可以获取目录中的所有文件:

Dir['lib/**/*.rb']
=> ["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"]

但是我想从浅到深迭代它们。即a.rb - > b.rb - > c.rb

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

嗯,你可以用斜线数量对它们进行排序,这可能不是很有效但很容易:

["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"]}