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 に答える