我試圖創建一個樹狀結構。每個班級都有一個父級字段和子級列表,與父級班級是同一班級。基本的東西。C# - 基於深度值和列表索引創建樹狀結構
這裏是我正在使用的類的基本版本。
public class TreeElement {
public string name;
public int depth;
public int id;
public TreeElement parent;
public List<TreeElement> children = new List<TreeElement>();
}
現在,當我得到初始數據時,我將所有這些類都列入列表中。我的樹視圖中的每個項目都在一個大列表中,我可以繼續進行的是項目的深度值和索引。因此,該列表將基本上是這個樣子:
(0) -1
(1) |- 0
(2) |-- 1
(3) |-- 1
(4) | |-- 2
(5) |-- 1
(x)表示在列表中的索引。其餘的數字是深度值。
現在我的實際問題。我很難根據這些值製作我自己的列表,而且我基本上只知道每個孩子的單個項目被添加到哪裏並且兄弟姐妹會被忽略。我真的找不到將這些考慮在內的方法。
這裏是我到目前爲止的代碼(這可能是這個可怕的錯誤):
private List<TreeElement> GenerateTreeStructure(List<TreeElement> baseList)
{
// Base list is the list I get provided with.
List<TreeElement> newList = new List<TreeElement>();
TreeElement root = null;
TreeElement previousFolder = null;
int previousdepth = -99;
for (int i = 0; i < baseList.Count; i++)
{
TreeElement currentResource = baseList[i];
if (currentResource.depth == -1 && ShowRootFolder) // The root folder.
{
root = currentResource;
// (Name, depth, parent)
newList.Add(new TreeElement("Root", currentResource.depth, null));
previousFolder = root;
previousdepth = root.depth;
}
else if (!ShowRootFolder && currentResource.depth <= 0)
{
// If root folder is not shown, take all the children of the root folder instead.
if (currentResource.depth != -1)
{
previousFolder = new TreeElement(currentResource.name, currentResource.depth, null);
previousdepth = previousFolder.depth;
newList.Add(previousFolder);
}
}
else
{
if (currentResource.depth > previousdepth)
{
TreeElement newResource = new TreeElement(currentResource.name, currentResource.depth, null);
previousFolder.children.Add(newResource);
previousdepth = currentResource.depth;
previousFolder = newResource;
}
}
}
return newList;
}
我希望解釋我的問題。我一直堅持這一段時間,我希望能得到一些幫助!
謝謝
這正是我想要的,謝謝!並澄清我爲什麼返回一個列表:我需要輸入一個列表到樹視圖顯示。但我只是簡單地將它轉換成使用你的代碼返回一個列表。 – Hertzole