【发布时间】: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"forLightYellow) - 这对我有什么帮助,因为我仍然需要遍历比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