J'essaie de créer une structure arborescente. Chaque classe a un champ parent et une liste d'enfants, c'est la même classe que la classe parente. Trucs de base.C# - Créer une structure arborescente basée sur les valeurs de profondeur et les index de liste
Voici une version de base de la classe que j'utilise. Maintenant, quand j'obtiens les données initiales, j'obtiens toutes ces classes dans une liste. Chaque élément de ma vue arborescente est dans une grande liste, et tout ce que je peux continuer est la valeur de profondeur et l'index de l'élément dans la liste. Donc, la liste ressemblerait fondamentalement quelque chose comme ceci:
(0) -1
(1) |- 0
(2) |-- 1
(3) |-- 1
(4) | |-- 2
(5) |-- 1
(x) signifie que l'index dans la liste. Le reste des nombres sont les valeurs de profondeur.
Maintenant à mon problème réel. J'ai vraiment du mal à faire ma propre liste basée sur ces valeurs et je n'ai essentiellement obtenu qu'un seul élément dans chaque enfant ajouté et les frères et sœurs sont ignorés. Je ne peux vraiment pas trouver un moyen de les prendre en compte.
Voici mon code jusqu'à présent (ce qui est probablement horriblement mal pour cela):
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;
}
J'espère que cela explique mon problème. Je suis coincé avec cela depuis un bon moment et j'espère obtenir de l'aide avec ça!
Merci
Cela a fait exactement ce que je voulais, merci beaucoup! Et pour clarifier pourquoi je l'ai eu retourner une liste: j'ai besoin d'entrer une liste à l'affichage de l'arborescence. Mais je l'ai simplement converti pour retourner une liste en utilisant votre code. – Hertzole