0

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

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

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

有什么建议吗?

4

1 回答 1

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"]}
于 2012-06-25T20:59:50.420 回答