【问题标题】:Sort file names in a single directory by directory depth按目录深度对单个目录中的文件名进行排序
【发布时间】:2015-06-10 09:07:42
【问题描述】:

使用Dir.glob在一个目录及其子目录中查找所有同名文件后,有没有办法按子目录深度对这个结果数组进行排序,使当前目录位于顶部,而最低子目录是数组中的最后一个元素吗?

【问题讨论】:

    标签: arrays ruby


    【解决方案1】:

    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) 次。
    猜你喜欢
    • 2020-07-30
    • 2016-01-14
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2011-08-01
    • 2011-07-03
    相关资源
    最近更新 更多