在Ruby中,如何在目录列表中的文件夹之前列出/排序文件?

Jam*_*ine 5 ruby directory filesort

我必须在ruby中使用以下代码:

<%
  files = Dir.glob('/**/*')
  files.each do |file|
    puts file
  end
%>
Run Code Online (Sandbox Code Playgroud)

它输出(例如):

/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/file1.txt
/file2.txt
/subdirA/file1.txt
Run Code Online (Sandbox Code Playgroud)

我希望它像这样输出:

/file1.txt
/file2.txt
/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/subdirA/file1.txt
Run Code Online (Sandbox Code Playgroud)

基本上,我想在目录之前显示文件.我可以使用排序命令吗?

Ama*_*dan 6

我相信这对你有用:

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

更改"/"?/,如果你上红宝石1.8.

或者,作为一个单行::)

Dir.glob('**/*').map { |file| [file.count("/"), file] }.sort.map { |file| file[1] }.each { |file| puts file }
Run Code Online (Sandbox Code Playgroud)

  • `Enumerable#sort_by`使得Schwartzian变换更容易理解,`String#count`适用于1.8和1.9:`files = Dir.glob('**/*').sort_by {| file | [file.count("/"),file]}`.(仍然需要使用相同的斜杠计数来断开文件名之间的关系.) (2认同)