【问题标题】:Performant editing and traversing of a hierachical list分层列表的高性能编辑和遍历
【发布时间】:2015-03-25 05:58:47
【问题描述】:

我在使用第二个查找列表的帮助下编辑分层列表中的字段/属性时遇到问题。我尝试的所有东西看起来都一团糟,很难维护。二叉搜索树是我的朋友吗?我将如何应用它们?扁平化我的层次结构不起作用,因为我需要层次结构,只是过滤。

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")};

我的基本过滤器基本上是这样的:

  • 颜色
    • 绿色
    • 黄色
      • 浅黄色
        • 淡黄色
    • 橙黄色
    • 红色
      • 深红
  • 声音
    • 米普
    • 莫普
    • 地图

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

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

  • 颜色
    • 绿色
    • 黄色
      • 淡黄色
        • 淡黄色
    • 红色
  • 声音
    • 米普

我一直在尝试递归循环遍历分层列表,但我不知道如何将父级设置为 IsDisplayed(因为我必须“返回”)。当通过 ActiveFilters 以另一种方式循环时,我不想为每个有源过滤器性能明智地迭代整个过滤器列表。

【问题讨论】:

  • 有什么理由不能添加 Parent 属性并使用它进行遍历?
  • 我可以定义我认为合适的结构,所以我也可以添加一个Parent(例如Parent = "Yellow" for LightYellow) - 这对我有什么帮助,因为我仍然需要遍历比LighterYellow下降不止一个?
  • 这类问题太多了!简单的解决方案是您给 Filter 一个 Id 和 ParentId 并且只有一个平面列表,您可以将其传递给 Filter.GetChildern(List allFilters)
  • @Ewan 你是对的很多stackoverflow.com/questions/4079665/… 问题stackoverflow.com/questions/2117404/searching-hierarchical-list - 但我仍然有问题。如果有类似解决方案的问题,是否需要链接更多问题?
  • 答案是没有层次结构。

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


【解决方案1】:

我会这样做:

首先,将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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2021-12-08
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多