高性能编辑和遍历分层列表

时间:2015-03-24 21:43:59

标签: c# filtering hierarchical-data tree-traversal

我在第二个查找列表的帮助下编辑分层列表中的字段/属性时遇到问题。我尝试的一切看起来都很乱,很难维护。二元搜索树是我的朋友吗?我该如何应用它们?展平我的层次结构并不起作用,因为我需要层次结构,只是过滤了。

public class Filter
{
  public string Name {get;set;}
  public bool IsActive {get;set;}
  public bool IsDisplayed {get;set;}
  public string List<Filter> Filters {get;set}
}

public List<string> ActiveFilters {"Green", "LighterYellow", "Red", "Meep")};

我的基本过滤器基本上如下所示:

  • 颜色
    • 绿色
    • 黄色
      • 浅黄色
        • LighterYellow
    • OrangishYellow
      • 暗红色
  • 声音
    • MEEP
    • MOOP
    • MAAP

现在我尝试将其中一些过滤器设置为活动。但当然,ActiveFilters中的孩子的父母需要显示(IsDisplayed),否则您将无法看到子项目。

最后,我希望层次结构看起来像这样(基于应用ActiveFilters粗体表示IsActive斜体 {{ 1}}):

  • 颜色
    • 绿色
    • 黄色
      • 浅黄色
        • LighterYellow
    • 红色
  • 声音
    • MEEP

我一直试图以递归方式循环遍历分层列表,但我不知道如何将父母设置为IsDisplayed(因为我必须&#34;回到&#34; )。循环通过IsDisplayed的另一种方式时,我不想在每个活动过滤器性能上迭代整个过滤器列表。

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

首先,将Parent属性添加到Filter

public class Filter
{
  public string Name {get;set;}
  public bool IsActive {get;set;}
  public bool IsDisplayed {get;set;}
  public string List<Filter> Filters {get;set}

  // Parent
  public Filter Parent {get;set;}
}

在层次结构的初始化代码中,确保正确填充Parent。 (我不知道你的代码是什么样的,所以我会把那部分留给你。)

接下来,在突出显示活动过滤器的代码中,执行以下操作:

var parent = activeFilter.Parent;
while (parent != null)
{
    parent.IsDisplayed = true;
    parent = parent.Parent;
}