В Ruby, как вы перечисляете / сортируете файлы перед папками в списке каталогов? - PullRequest
5 голосов
/ 09 октября 2010

Мне нужно следующий код в ruby:

<%
  files = Dir.glob('/**/*')
  files.each do |file|
    puts file
  end
%>

Он выводит (например):

/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/file1.txt
/file2.txt
/subdirA/file1.txt

Я хочу, чтобы он вывел его так:*

По сути, я хотел бы, чтобы файлы отображались перед каталогами.Можно ли использовать команду сортировки?

Ответы [ 2 ]

6 голосов
/ 09 октября 2010

Я считаю, что это должно работать для вас:

files = Dir.glob('**/*')
files = files.map { |file| [file.count("/"), file] }
files = files.sort.map { |file| file[1] }
files.each do |file|
  puts file
end

Измените "/" на ?/, если вы используете Ruby 1.8.

Или, как однострочник::)

Dir.glob('**/*').map { |file| [file.count("/"), file] }.sort.map { |file| file[1] }.each { |file| puts file }
1 голос
/ 09 октября 2010
d,f = Dir.glob('*').partition{|d|test(?d,d)}
d.sort.each{|x|puts x}
f.sort.each{|y|puts y}
...