1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
{ package A; my $self = { key_1 => value_1, key_2 => value_2, key_3 => [objects of B], key_n => 'value_n', }; sub lastIndex { my $self = shift; return $#{$self->{key_3}}; } } { package B; my $self = { key_1 => value_1, key_2 => value_2, key_n => 'value_n', }; sub isLast { my $self = shift; } } my $pkg_B_[4]->isLast;
2014-01-07T14:50:37 MuffiMagst du nicht genauer beschreiben um was es geht?
Dein Vorhaben klingt sehr komisch.
2014-01-07T14:50:37 Muffi// edit: und da du immer wieder abwechselnd von Datenstruktur und Objekt sprichst: Du kennst den Unterschied?
if ($a->is_object_last($b))
if ($Person->letzter_in_liste()) { # hat keine Kinder
2014-01-08T07:32:58 MuffiWas das Rezept macht kann ich mir schon vorstellen. Ich glaub irgendwie nur nicht, dass du auf dem richtigen Weg bist.
Warum geht z.B. sowas nicht?
Code (perl): (dl )if ($a->is_object_last($b))
Und um da nicht noch zig mal nachfragen zu müssen "warum XYZ nicht" wärs halt evtl. leichter wenn man weiss was du vor hast.
edit: Oder anders gesagt: man kriegt nach X Jahren Programmieren irgendwann ein Gespür für "komsiche" Lösungswege.
[...]
2014-01-08T09:53:40 MarkusHFür mich als Freizeitprogrammierer (max. 5 Wochen/Jahr) ist es unglaublich schwierig festzustellen, ob der Lösungsweg komisch ist oder nicht - Hauptsache es funktioniert.
2014-01-08T10:09:06 hlubenow[...]
Wenn Du Dir nicht mehr Wochen pro Jahr dafür Zeit nehmen willst, [...]
2014-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.
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.
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.
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?
QuoteIch habe eine Datenstruktur, bei der ein Objekt A mehrere Objekte vom Typ B in einem Array gespeichert hat.
Wie kann ich abfragen, ob ein Objekt vom Typ B das letzte bzw. erste im Array ist? Auch ob es einen Vorgänger und Nachfolger gibt wäre interessant.