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);
}
}
}
}
但顯然這是一個壞的方法。 我想得到一些關於如何正確遍歷列表的幫助和建議。
該代碼對我來說並不壞。但整個數據結構可以重新設計,您是否可以控制所有設計? –
不幸的是沒有。我必須與此合作。給定不良數據結構的 –
,算法不夠優雅是合理的。 –