Ich möchte eine Baumansicht in C# erstellen, die Datei nach Präfix gruppiert (hier ist das Präfix durch das Trennzeichen _
markiert). Die folgenden Dateien sollten diesen Baum geben:Eine Baumansicht rekursiv erstellen
Files
Liste:
p_a
p_a_test
p_LIG
p_p
p_p_c
p_p_c2
p_p_ccc
p_p_test
p_tres
TestLineGraph1
TestLineGrpah
Entsprechende Baum:
|--p_
|--p_a
|--p_a_test
|--p_LIG
|--p_p
|--p_p_
|--p_p_c
|--p_p_c2
|--p_p_ccc
|--p_p_test
|--p_tres
TestLineGraph1
TestLineGrpah
Hier ist mein Versuch, Code:
private GraphUINode(List<string> subNodes, GraphUINode parent, string name, int lvl = 0)
: base(parent.m_viewDataSubControl)
{
parent.Nodes.Add(this);
this.Name = name;
this.Text = name;
string currentPrefix = "";
int pertinentSubNodes = 0;
while (pertinentSubNodes < subNodes.Count -1 && subNodes[pertinentSubNodes].Split('_').Length < 2+ lvl)
pertinentSubNodes++;
for (int i = 0; i <= lvl; i++)
{
currentPrefix += subNodes[pertinentSubNodes].Split('_')[i] + "_";
}
List<String> children = new List<string>();
foreach (string child in subNodes)
{
// The child is in the same group than the previous one
if (child.StartsWith(currentPrefix))
{
children.Add(child);
}
else
{
// Create a node only if needed
if (children.Count > 1)
{
// Create the new node
new GraphUINode(children, this, currentPrefix, lvl + 1);
children.Clear();
children.Add(child);
}
else
{
new GraphTemplateNode(this, m_viewDataSubControl, child);
}
currentPrefix = "";
for (int i = 0; i <= lvl; i++)
{
currentPrefix += child.Split('_')[i] + "_";
}
}
}
}
Aber ich vermisse ein paar diejenigen im Endergebnis:
Wie kann ich es zurückbekommen? Auch wenn ich Schritt für Schritt debugge, kann ich den logischen Weg nicht finden.
Warum sollte 'p_a_test' nicht unter einem' p_a_' Knoten sein? – juharr
@juharr Hey, das stimmt! Nun, das ist eine weitere Sache zu beheben :( –
Nicht nur fehlt mindestens eine, Ihre 'p_a_test' sollte nie unter dem Knoten 'p_p' sein. Ich denke, ich würde den Code trennen, zuerst eine hierarchische Darstellung mit Klassen und erstellen rendern Sie das dann mit einem rekursiven Aufruf in eine Baumansicht –