2014-01-07T18:15:08
clms2014-01-07T14:46:18
MarkusHDemnach muß ich in jedem Objekt B zwei Felder hinzufügen, die eine Referenz auf das vorhergehende und das nachfolgende Objekt enthalten.
Mit solchen verketteten Listen - insbesondere in beide Richtungen verkettete Listen wie hier - würde ich sehr vorsichtig sein, weil Du damit die Garbage-Collection aushebelst.
Das kann unproblematisch sein, weil Dein Programm ohnehin nur wenige "B" anlegt oder diese ohnehin bis zum Laufzeitende speichern muss, kann aber auch zu einem explodierenden Speicherbedarf führen.
In der Regel ist die Anzahl der "B"s <50. Aber es kann immer Ausnahmen geben. Gespeichert wird bis Programmende, oder das übergeordnete A wird gelöscht.
QuoteAnsonsten ist es mit den beiden Referenzen oder Links nicht getan - Du brauchst auch noch Funktionen, die das Einhängen und Austragen von "B"s in die jeweilige Liste kapseln und so dafür sorgen, dass die Referenzen immer auf dem aktuellen Stand sind.
Ich hab das jetzt in die Einlesefunktion der Datei mit integriert. Zusätzliche Bs einhängen, Bs löschen oder deren Reihenfolge ändern ist nicht erlaubt.
QuoteDu schreibst, dass die Datenstruktur aus einer Datei erstellt wird.
Wenn Du eine Funktion hast, die die Datei einmal einliest und dann die Datenstrukturen der Typen A und B anlegt, weiß diese Funktion doch, welches die erste Struktur von typ B ist und welche die letzte. Dann könnte diese Funktion entsprechende Flags setzen. Oder wird das Array in "A" anschließend noch geändert (von wem?), so dass die Info, welches "B" erstes und welches letztes ist, jeweils dynamisch verwaltet werden muss?
Ich hab zusätzlich noch die Aufgabe, dass das Hauptprogramm, das die Klasse A einbindet, diverse Attribute der Bs kontrollieren und bei Bedarf ändern muß. Z.B. wenn die Position (XYZABC) eines Bs mit der Position des vorhergehenden oder nachfolgenden Bs identisch ist. Das kann ich so relativ leicht realisieren. Mal schaun, wo mich das hinführt.
$q =~ /(bb|[^b]{2})/