通过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"]}