【问题标题】:C# - Traversing Nodes of a Tree and Identify levelC# - 遍历树的节点并识别级别
【发布时间】:2017-10-22 14:15:12
【问题描述】:

我有一个应用程序,它允许用户从树结构中选择项目,然后将这些项目传递给构建报告的方法。 item 是最小的粒度级别,包含一个 id 值。我需要生成一个可枚举的对象,该对象可用于生成汇总级别报告和单个项目报告。例如,下图显示了树和愿望报告结构。

我需要的是能够识别或标记需要单独打印的项目。换句话说,如果在任何子组中都找不到项目,则将其标记为需要打印个人。这很重要,因为该项目可能存在于多个分组中。如何解析树并检查该项目是否存在于子节点中?

Item 和 ItemSet(groups) 类如下:

public class Item
{
    public int Property1 { get; set; }
    public int Property2 { get; set; }
    public int Property3 { get; set; }
    public int Property4 { get; set; }
}

public class ItemSet
{
    public List<Item> Items { get; set; }
    //.
    //.
    //.
    //.
    public List<ItemSet> ItemSets { get; set; }



}

请注意,一个项目集可以包含其他项目集。此外,项目列表包括所有项目,包括子项目。我需要一种机制来检查该项目是否仅存在于该级别。

更新

为了进一步澄清,我添加了总结类图来说明项目、项目集和整个应用程序的关系/组成。这是一个遗留代码库,所以我没有太大的灵活性,必须凑合与大部分存在的东西。当getAllItems() 在一个特定集合上被调用时,它会返回它的所有后代,即使它是属于嵌套集合的一个项目。我需要能够确定它是直接死者还是子集的孩子。

【问题讨论】:

  • 您似乎在问题中混淆了许多不同的术语,这使得很难理解。什么是井,与Item 有什么关系?什么是ItemSet,它与组有什么关系?您认为子节点是什么?它与井、Item、组或ItemSet 有什么关系?
  • 对不起,井是一个项目。项目存在于 ItemSet 中,这也是我在树中调用的组或节点。我会澄清的。
  • 您是否在示例中显示任何需要标记的项目?你怎么知道它们的存在?
  • 我会更新帖子以澄清我在处理什么。

标签: c# loops recursion tree


【解决方案1】:
foreach (var item in itemSet.getAllItems())
{
  if (item.Parent == itemSet)
  {
    // Is child of itemSet
  }
  else
  {
    // Is descendant of nested itemSet
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2014-05-27
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多