通过Dir
的魔力,我可以获取目录中的所有文件:
Dir['lib/**/*.rb']
=> ["lib/a.rb", "lib/foo/bar/c.rb", "lib/foo/b.rb"]
但是我想从浅到深迭代它们。即a.rb
- > b.rb
- > c.rb
。
有什么建议吗?
答案 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"]}