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