【问题标题】:Building a directory tree from a list of file paths从文件路径列表构建目录树
【发布时间】:2010-03-15 05:09:48
【问题描述】:

我正在寻找一种节省时间的方法来将文件列表解析为树。可能有数亿个文件路径。

蛮力解决方案是在出现目录分隔符时拆分每个路径,并通过进行字符串比较来遍历添加目录和文件条目的树,但这会非常慢。

输入数据通常按字母顺序排序,因此列表类似于:

C:\Users\Aaron\AppData\Amarok\Afile

C:\Users\Aaron\AppData\Amarok\Afile2

C:\Users\Aaron\AppData\Amarok\Afile3

C:\Users\Aaron\AppData\Blender\alibrary.dll

C:\Users\Aaron\AppData\Blender\and_so_on.txt

从这个顺序中,我的自然反应是将目录列表分成组......不知何故......在进行慢速字符串比较之前。我真的不确定。我会很感激任何想法。

编辑:如果可能的话,如果这棵树从上到下延迟加载会更好。

【问题讨论】:

标签: performance directory tree


【解决方案1】:

您别无选择,只能进行完整的字符串比较,因为您无法保证字符串的不同之处。有一些技巧可能会加快速度:

  • 正如 David 所说,形成一棵树,但从前一个插入点中搜索新的插入点(也许借助某种 matchingPrefix 例程,它会告诉您新插入点的不同之处)。
  • 如果树中可能有很多文件并且您需要计算重复项,请为树的每个级别使用哈希表。 (否则,附加到堆栈是可以的。)

【讨论】:

    【解决方案2】:

    如果可能,您可以使用tree 命令here 生成树结构

    【讨论】:

      【解决方案3】:

      要利用输入数据的“通常排序”属性,请从插入最后一个文件的目录开始遍历:将当前路径名的目录名与前一个路径名进行比较。如果它们匹配,您可以在此处插入,否则弹出一个关卡并重试。

      【讨论】:

        猜你喜欢
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多