Ich habe, was ein ziemlich triviales Problem sein sollte, aber ich möchte sicherstellen, dass ich das auf die "eleganteste" Weise mache, die in .Net 4.5 möglich ist und ich möchte einige Meinungen von Leuten, die schlauer sind als ich.Generic Tree Structure - Wie man ein Organigramm bevölkert
Ich habe eine Klasse, die eine generische Baumstruktur als solche darstellt:
public class TreeNode<T>
{
List<TreeNode<T>> Children;
T Item {get;set;}
public TreeNode (T item)
{
Item = item;
}
public TreeNode<T> AddChild(T item)
{
TreeNode<T> nodeItem = new TreeNode<T>(item);
Children.Add(nodeItem);
return nodeItem;
}
}
Nun, ich habe eine Person-Klasse, die einen Mitarbeiter der Organisation darstellt. Jedes Person
Objekt hat eine ID
und eine BossID
, die auf ihre Superior zeigt.
Mehrere Mitarbeiter können den gleichen Chef haben, weshalb ich versuche, ein Organigramm mit dieser Baumstruktur zu erstellen.
Der oberste Knoten wird das Objekt Person
sein, wobei BossID
null ist (es ist ein int?
). Das kann ich schnell mit LINQ erreichen.
Es ist der nächste Schritt, der mich ein wenig verwirrt. Es gibt mehrere Ansätze, aber sie scheinen etwas schlampig zu sein und ich weiß, dass es eine viel einfachere/elegantere Möglichkeit geben muss, den Rest des Organigramms auszufüllen.
So jetzt habe ich ein generisches Objekt von List<Person>
hält alle Mitarbeiter, mit ihren verschiedenen BossID
s und diese generische Baumstruktur, die ich Kindknoten hinzufügen kann.
Es ist alles sehr einfach, aber was ist die richtige Reihenfolge, um den Baum zu füllen? Soll ich rekursiv die Linie durchlaufen? Ich weiß, dass hier ein Backtracking involviert ist, wo ich ratlos bin.
Ich entschuldige mich, mein Hintergrund ist nicht in der Informatik, und wenn es war, merke ich, dass Baumstrukturen, verknüpfte Listen und alles andere triviale Sachen sind. Aber das ist mein erster Versuch und ich möchte sehen, wie es richtig gemacht wird.
Ich schätze jede Anleitung.
Also im Grunde ist Ihre Frage, wie man Orgbaum erstellt, da Sie eine Liste von Menschen haben? –
So einfach ist das. Ich habe diese generische Baumklasse, ich habe eine Liste <> von Personenobjekten mit ihren eigenen IDs und der ID ihres Bosses. Ich möchte nur wissen, was der sauberste Ansatz unter 4.5 wäre. Ich weiß, dass ich nachschlagen kann, wie man einen Baum füllt, aber es gibt einige sehr schlechte Beispiele da draußen, nur auf der Suche nach Input. Ich habe hier einige erstaunliche Magie gesehen, besonders mit Dingen wie LINQ ... die den Code für mich stark vereinfacht haben. – Patrick