【问题标题】:Recursively remove empty items in tree directory structure递归删除树目录结构中的空项
【发布时间】:2013-07-29 15:45:36
【问题描述】:

我已经使用NSTreeNode 创建了文件和文件夹的目录树结构,我在 NSOutlineView 中显示。我的问题是某些文件夹是空的,我想从显示中删除这些文件夹。我曾尝试递归地遍历树结构的每个元素以删除元素,但显然构建树比拆除它要容易得多。我的迭代从根开始,然后遍历每个节点子节点,直到到达树的顶部。但是,由于某些文件夹可以包含多个空文件夹和非空文件夹,因此很难有效地删除我不确定是否为空的元素。仅仅因为一个文件夹只包含另一个文件夹并不意味着我可以删除它,因为子文件夹可能是空的或包含文件。

我认为我需要找到树的顶部元素/目录,然后通过所有父子节点向后迭代到我的根节点,并检查每个文件夹是否为空。如果文件夹为空或仅包含我当前所在的文件夹,请删除该文件夹和父文件夹,依此类推,直到我到达根目录。

但是,我无法让它工作。有没有人有办法找到定义树顶的元素?或者有没有一种好方法可以对 NSTreeNode 结构中的空元素进行排序/删除?

感谢我能在这方面获得的所有帮助。谢谢。干杯,特隆德

【问题讨论】:

  • 我认为您只需要遍历每个分支的末尾,如果最后一个文件夹为空,则将其删除,然后递归地向上移动树,删除空且为叶子的文件夹...

标签: objective-c cocoa recursion iteration nsoutlineview


【解决方案1】:

在伪代码中:

BOOL removeTheChildless(NSTreeNode *tree)
{
   for each NSTreeNode *child
   {
      if ( removeTheChildless(child) )
          removeChild child from tree
   }

   return tree.isLeaf;
}

“for each”可以基于mutableChildNodes。 HTH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2020-09-06
    • 1970-01-01
    • 2014-04-29
    • 2012-03-21
    • 2013-04-25
    • 2014-05-12
    相关资源
    最近更新 更多