Hey hey
,
so ganz ist mir noch nicht klar, was das Ziel ist. Du hast einen fertigen TOCEntry-Baum und durch den rekursiven Code den homomorphen Section-Baum. Jetzt suchst du zu einer bestimmten Seitenzahl das Section-Objekt, dessen TOCEntry diese PageNum hat? Dann würde ich in AddRecursive gleich noch ein
Dictionary<int, Section> mitbefüllen - deutlich einfacher, als im Nachhinein in den Bäumen herumzusuchen
.
/add
@alzaimar: An einen Iterator, also prinzipiell die Umwandlung des Baumes in eine leichter durchsuchbare Liste, hatte ich als erstes auch gedacht, aber gerade durch das Zusammenspiel der beiden Bäume gehe ich davon aus, dass die Daten/Beziehungen direkt beim Erstellen besser eingesammelt werden können.
Was du mit 'First/Next/EndOfData()' beschreibst, entspricht übrigens
IEnumerable . Und die Pseudo-Koroutinen-C#-Iteratoren machen die Implementierung trivial.
Code:
public void IEnumerable<TOCEntry> Flatten()
{
yield this;
foreach (TOCEntry child in SubEntries)
foreach (TOCEntry item in child.Flatten())
yield child;
}