0
有一个项目列表包含名为“HierarchyLevel”(类型字符串),它决定了像这样的元素的层次结构:Link to image。 树结构是这样的:迭代throuh列表以确定元素的层次结构级别
<ul>
<li>1</li>
<ul>
<li>1.01</li>
<ul>
<li>1.01.01</li>
<li>1.01.02</li>
</ul>
<li>1.02</li>
<ul>
<li>1.02.01</li>
</ul>
<li>1.03</li>
</ul>
<ul>
等。
我的目标是实现一个包含每个元素的父项和子项的信息的类。 到目前为止,我有这个类:
class TreeNode<DBItem>
{
public DBItem Value { get; private set; }
public List<TreeNode<DBItem>> Children = new List<TreeNode<DBItem>>();
public TreeNode<DBItem> Parent { get; private set; }
public string Level { get; private set; }
public TreeNode (DBItem item, string level)
{
this.Value = item;
this.Level = level;
}
public TreeNode<DBItem> this[int i]
{
get { return this.Children[i]; }
}
public TreeNode<DBItem> AddChild(DBItem item, string level)
{
TreeNode<DBItem> node = new TreeNode<DBItem>(item, level) { Parent = this };
this.Children.Add(node);
return node;
}
}
问题是,我不太明白如何通过项目的集合迭代。我试过这个:
TreeNode<DBItem> parent = new TreeNode<DBItem>(neededItems[0], "1");
foreach (var doc in neededItems)
{
string level = doc.GetStringValue("HierarchyLevel");
if (level.StartsWith("1.")&& level.Length < 5)
{
var child1 = parent.AddChild(doc, level);
foreach (var child in neededItems)
{
string level1 = child.GetStringValue("HierarchyLevel");
if (level1.StartsWith("1."+level))
{
child1.AddChild(child, level1);
}
}
}
}
但显然这是一个坏的方法。 我想得到一些关于如何正确遍历列表的帮助和建议。
该代码对我来说并不坏。但整个数据结构可以重新设计,您是否可以控制所有设计? –
不幸的是没有。我必须与此合作。给定不良数据结构的 –
,算法不够优雅是合理的。 –