【发布时间】:2015-06-10 09:07:42
【问题描述】:
使用Dir.glob在一个目录及其子目录中查找所有同名文件后,有没有办法按子目录深度对这个结果数组进行排序,使当前目录位于顶部,而最低子目录是数组中的最后一个元素吗?
【问题讨论】:
使用Dir.glob在一个目录及其子目录中查找所有同名文件后,有没有办法按子目录深度对这个结果数组进行排序,使当前目录位于顶部,而最低子目录是数组中的最后一个元素吗?
【问题讨论】:
Dir.glob将文件名作为字符串数组返回,字符串可以按其中/的个数排序,如下:
Dir.glob(....).sort{|a, b| a.count('/') <=> b.count('/')}
对于反向排序:
Dir.glob(....).sort{|a, b| b.count('/') <=> a.count('/')}
【讨论】:
.sort_by { |x| x.count('/') }(反向:.sort_by { |x| -x.count('/') }) - sort_by 调用 Ruby 块 N 次,然后在 C 代码中对结果进行 O(N log N) 比较; sort 调用 Ruby 块 O(N log N) 次。