Mehrdimensionale LinkedListe verwalten.

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Mehrdimensionale LinkedListe verwalten.

Beitrag von PureLust »

Moin zusammen,

ich baue gerade ein ImageView-Control (also eine Art ListViewGadget für Images).
Nun hätte ich eine Frage zur Verwaltung der Zeilen bzw. der Zeilen bei mehrerer Controls:

Die einzelnen Zeilen eines solchen ImageView-Controls verwalte ich in einer LinkedList (was ja wohl auch üblich und ok sein dürfte).
Nun stellt sich mir aber die Frage - wir verwalte ich wiederum mehrere ImageView-Controls bzw. wiederum die Zeilen dieser Controls??? :?

Denn bei einer dynamischen Anzahl von verwendeten Controls würde sich ja für Verwaltung dieser Controls wiederum eine LinkedList anbieten.
Nur würde ich ja dann wiedrum noch jeweils eine weitere LinkedList je Control für die einzelnen Zeilen eines Controls benötigen.
Also im Grunde eine zweidimensionale LinkedList.
Aber sowas geht ja meines Wissens nach in PB nicht.

Die komplette Verwaltung auf ein mehrdimensionales Dim-Array umzustellen bringt mir ja auch nicht viel, da ich ja nur die letzte Dimension per Redim verändern kann.

Da ich mal annehme dass der eine oder andere erfahrenere PB-Programmierer unter Euch auch schon mal vor solch einem Problem gestanden hat, wollte ich mal fragen wie Ihr sowas gelöst habt, bzw. ob Ihr da einen Tip für mich hättet, wie man das am elegantesten lösen könnte.

Schon mal vielen Dank im Voraus,
PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ich nehme an, dass es sich um strukturierte listen handelt. was hätte es für nachteile, in der struktur einfach ein feld einzuführen, welches das control identifiziert (bzw auch noch eines für die zeile). man kann ja dann für ein bestimmtes control einfach die liste filtern:

Code: Alles auswählen

ForEach list()
  if list()\cntrl=3
    ;...
    doStuff()
    ;...
  endif
Next
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Klar, daran hatte ich natürlich auch schon gedacht,

Der Nachteil wäre natürlich der, dass ich für jedes Control druch die gesamte Liste gehen muss.
Wird performace technisch zwar vermutlich noch im Rahmen bleiben, aber ich hatte halt irgendwie auf eine ' noch etwas elegantere' Lösung gehofft. :D

Bisher sieht meine Planung aber so aus, dass ich das wohl auf diese Weise umsetzen werde.
Also Big ThanX for conforming !!! :allright:


PS: Wie sieht's denn damit aus:
Könnte man nicht in der Haupt-LL für die Controls einen Pointer auf das erste LL-Element in der Zeilen-LL ablegen und somit dann irgendwie immer direkt schon auf das erste (zum entsprechenden Control gehörige) Element zugreifen?
So könnte man dann z.B. die einzelnen Zeilen der jeweiligen Controls alle direkt hintereinander in der Zeilen-LL ablegen.
Somit hätte man sie bereits alle schön der Reihe nach sortiert und müsste nicht mit Hilfe eines Filters durch die ganze LL jagen?

Nur ... wie ich das mit Zugriff auf die LL-Einträge über Pointer realisieren könnte, wüsste ich momentan noch nicht so ganz. :?
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ich weiß, sieht im code immer ein bisschen laut aus die ganze liste durchzugehen um nur bestimmte elemente zu bearbeiten. der umweg über pointer lohnt sich meines erachtens aber erst ab vielleicht 1.000.000 elementen. bei sehr viel weniger elementen, spiel es keine rolle, und schon gar nicht, bei anwendungen deren meiste zeit sowieso beim user draufgeht.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Jo, da hast Du wohl recht.
Vor allem, da die LinkedLists in meinen früheren Tests unter PB3.94 extrem schnell waren (schneller noch, als der sequenzielle Zugriff über ein eindimensionales Array).
Ob ich dann mit den total durcheinandergewürfelten Zeilen nicht evtl bei. der Sortierung Probleme bekomme wird sich dann später mal zeigen. ;)

Ich werd's dann also wohl wie ursprünglich geplant mit dem zusätzlichen Feld in der Strucktur und 'ner Filterung umsetzen ... mal schauen wie's klappt und wie die Performance damit ist.
Also nochmals ThanX 4 TIP-gebing !!! :allright:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

..aber der tag is ja noch jung <) und vielleicht hat ja jemand doch noch was pfiffiges parrat.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

PB4

Schau mal inder Hilfe nach GetGadgetData(...) und SetGadgetData(...) sowie
GetGadgetItemData(...) und SetGadgetItemData(...)

Dieses kann ein einzelner Wert sein oder ein Pointer auf eine Strukture oder einer LinkedList.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

@mk-soft, ...

danke für den Tip, aber wirklich helfen kann mir das leider nicht, da ich ja kein bestehendes Gadget benutze (was ja nötig wäre um diese Eigenschaften zu nutzen) sondern ja selber eins baue.
Somit liegt die Verwaltung eines solchen GadgetData-Wertes ja ohnehin bei mir. ;)
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

irgendwie geht mir dein prob durch den kopf :roll: <) schon alleine wegen der generellen umsetzung von "pseudo-mehrdimensionalen listen".

ist es denn überhaupt möglich, LLs nicht nur dynamisch zu verwalten, sondern auch dynamisch zu erstellen? wenn ein control mit seinen zeilen eine einzige liste darstellt, wie erstellt man den dann eigentlich dynamisch zusätzliche controls bzw listen? denn das erstellen von (PB-)listen geht ja nur über NewList und mit einem identifier, insofern man keine eigenen LLs implementiert.

eine andere alternative wäre, so ähnlich wie du es selbst schon als schlichtes mehrdimensionales array angesprochen hast. dass bei ReDim nur eine dimension variabel ist, kann man umgehen, wenn man über pointer die mehrdimensionalität selbst schafft: ein control-array mit pointern auf jeweils ein zeilen-array. da nur eine datenstruktur verwendet wird (array) ist es vielleicht übersichtlicher, und die zeilen-anzahl eines controls beeinflußt nicht jene der anderen controls.
..ach so, man müsste die zeilen-arrays ja auch wieder mit allocate.. selbst erstellen und mit peekpoke verwalten, wenn man dynamisch neue braucht.
mhh.. :freak:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Dadurch, dass man in PureBasic keine VariableVariablen hat denk ich mal, dass das nicht geht....

Esseidenn du schreibst dir eine Klasse die da irgendwie, Irgendwo, intern irgendeine Verwaltung hat....
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Antworten