gpt4 book ai didi

ios - 核心数据中的文件夹结构

转载 作者:行者123 更新时间:2023-11-29 00:03:12 24 4
gpt4 key购买 nike

我将文件夹结构存储在核心数据中。它反射(reflect)了文件/文件夹的本地结构,并且每当用户在 finder 中执行任何操作(例如重命名/删除/创建)时都需要更新数据库。

我已经定义了单个实体节点(名称、完整路径、类型(目录/文件))。
从节点实体到自身的对多关系children,删除规则设置为级联
从节点实体到自身的一对一关系parent,删除规则设置为nullify。
并将它们设置为彼此的逆关系。

用户重命名文件夹时遇到问题。目前我正在更新节点并添加通过父路径和子名称构造完整路径的方法。

但有时我需要通过路径获取节点,并且文件节点在重命名后不会更新。我不想在重命名后循环遍历文件夹内的所有文件。某些文件夹包含 100k 个节点。

有人可以帮助我或建议我更好的设计吗?

最佳答案

您已经制造了这个问题,现在您看到了它的影响。

  • 您在每个节点上存储完整路径
  • 您的节点有 100k 或更多子节点
  • 您希望能够重命名路径的任意部分

无论您如何存储数据,您都可能会遇到需要同时更新 100k 或更多节点上的字符串值的情况。这需要大量工作,而且不容易优化,因为迟早你必须计算和更新所有这些字符串。

所以真正的问题是,为什么要在每个节点上存储完整路径,你能设法停止这样做吗?

我不知道你为什么要这样做。对于每个节点,您可以通过递归地遵循父关系直到到达根节点来计算出路径。同样,如果您有完整路径并且需要查找节点,则可以使用路径分隔符(可能是“/”)将路径拆分为多个组件,然后通过以下方式从根节点向下查找子关系来获取目标节点。

这样做的好处是,如果您重命名树中间某处的节点,就是这样,您就完成了!无需更新任何其他节点。

将数据表示为 trie 可能会更好而不是简单地命名每个节点并链接其子节点,但这需要 Core Data 中的一些创造力。我描述了one possible approach不久前,但我不一定认为这是最好的。除非您发现我上面描述的方法在实践中很慢,否则我不会尝试这个。

关于ios - 核心数据中的文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48837975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com