TList rückwärts durchgehen?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Fetze

Betreff: TList rückwärts durchgehen?

BeitragDo, Sep 01, 2005 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man eine TList möglichst mithilfe von EachIn rückwärts durchgehen? Wenn ja, wie?
 

Ava

Gast

BeitragDo, Sep 01, 2005 19:37
Antworten mit Zitat
Du kannst vorher ein Reverse machen und hinterher wieder rückgängig *falls nötig* - meinst Du so in etwa?

BlitzBasic: [AUSKLAPPEN]
reverselist(TList)

Fetze

BeitragDo, Sep 01, 2005 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das würde den Zweck erfüllen. Aber ist das nicht ziemlich langsam? o_O

Suco-X

Betreff: ......

BeitragDo, Sep 01, 2005 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest dir den Link(TLink) des letzten Objects der Liste Holen und mit Link.Before die Liste durchgehen. Musst dich wohl ein wenig ins Modul einlesen, wenn du es alleine lösen möchtest.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

TheShadow

Moderator

BeitragFr, Sep 02, 2005 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
hm diese TListen gefallen mir ehrlich gesagt nicht besonders...

Ich mach immer mit arrays - weiß nicht - müsste eig. genau so schnell sein beim hinzufügen. Beim abarbeiten ist es bestimmt sogar schneller - hab aber jetzt nicht getestet

Type button

Global list:button

Method New()
list=list[..list.length+1]
list[list.length-1]=Self
EndMethod

EndType

dann kann man mit

FOR i=0 to button.list.length-1
NEXT

normal ablaufen und mit

FOR i=button.list.length-1 to 0 step -1
NEXT

rückwärts ablaufen

Man kann alles nach Wunsch auch sortieren und nur Teile ablaufen oder jeden 2. Ablaufen. Oder z.B. binäre Suche anwenden... etc
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Ava

Gast

BeitragFr, Sep 02, 2005 11:27
Antworten mit Zitat
TheShadow hat Folgendes geschrieben:
Method New()
list=list[..list.length+1]
list[list.length-1]=Self
EndMethod


Oh mein Gott, ist das wirklich so einfach?!
Ich habe die EInträge immer in einer
Schleife in das neue Array rüberkopiert. Confused

*sich an Kopf fass*

Wenn das auch so geht, schreit das ja förmlich
nach Ausbesserung!! Twisted Evil

TheShadow

Moderator

BeitragFr, Sep 02, 2005 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
jup BBmax hat ja slices... intern wird sowas - denke ich mal optimiert durch Asm-Routinen in neuen Speicherbereich kopiert und der alte gelöscht... denke ich mal...

Bei TListen müsste an sich nur 1 Eintrag geändert werden - der letzte in einer Liste...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Markus2

BeitragFr, Sep 02, 2005 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
reverselist(TList)
Fetze hat Folgendes geschrieben:
...Aber ist das nicht ziemlich langsam?


Vieleicht macht Mark das intern für EchIn genau so ?
A=Start
B=Ende
If Reverse then Swap A,B
FOR i=A to B Step Reverse

Kann jemand Mark mal dazu interviewn ?
Würde mich mal interessieren ...

TheShadow

Moderator

BeitragFr, Sep 02, 2005 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Bisschen im Code gucken:
Mit Reverse(d) sollte man wirklich sehr vorsichtig sein - meiner Meinung nach - da es jedes Mal die Liste komplett verdoppelt


Code: [AUSKLAPPEN]

   Rem
   bbdoc: Swap contents with the list specified.
   End Rem
   Method Swap( list:TList )
      Local head:TLink=_head
      _head=list._head
      list._head=head
   End Method
   
   Rem
   bbdoc: Reverse the order of the list.
   End Rem
   Method Reverse()
      Swap Reversed()
   End Method
   
   Rem
   bbdoc: Creates a new list that is the reversed version of this list.
   End Rem
   Method Reversed:TList()
      Local list:TList=New TList
      For Local value:Object=EachIn Self
         list.AddFirst value
      Next
      Return list
   End Method
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Markus2

BeitragFr, Sep 02, 2005 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@TheShadow
Oh, da hat Mark sich das aber einfach gemacht Confused
Wo steckt das denn drinne ? Habe jetzt keine Lust zu suchen .
 

Ava

Gast

BeitragFr, Sep 02, 2005 20:06
Antworten mit Zitat
Markus2 hat Folgendes geschrieben:
Oh, da hat Mark sich das aber einfach gemacht Confused .


Einfach? Also ganz ehrlich ... ich weis nicht, was ich von diesem seinem Lösungsweg halten soll - ich finde das sehr sehr umständlich und unschön gelöst! Confused Eine Flag zu setzen wäre auf jeden Fall der elegantere Weg gewesen....

*sieht jetzt noch mehr Optimierungsbedarf für ihren Code* arhhh Evil or Very Mad

Markus2

BeitragFr, Sep 02, 2005 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
@Ava
Hätte auch nicht gedacht das es in BMax geschrieben ist .
Aber auf B.Com gibt es schon einen Thread mit Module Tweaks Smile

TheShadow

Moderator

BeitragSa, Sep 03, 2005 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Eine Flag zu setzen wäre auf jeden Fall der elegantere Weg gewesen....


geht nicht so einfach... ich hab jetzt nicht weiter nachgesehen... ich vermute er hat immer "link" zum nächsten + vorherigen element drinne... so wenn ich das tausche, dann muss ich all das quasi "umdrehen" - und zwar bei allen Elementen. Ein Flag wäre sozusagen sinnlos.

Aber diese Reserve-Funktion ist einfach Mist...

wie gesagt ich bin sowieso ein Fan von arrays Smile
Listen sind soo umständlich...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Fetze

BeitragSa, Sep 03, 2005 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar würde ein Flag was bringen. Es wird bei jedem auslesen von prevlink bzw. nextlink der entgegengesetzte zurückgegeben, wenn ein Flag gesetzt wurde. Geht natürlich nur, wenn das Auslesen über Methoden gesteuert wird und nicht direkt die Variablen ausliest.

...oder hab ich da jetzt nen Denkfehler gemacht? Confused
 

Ava

Gast

BeitragSa, Sep 03, 2005 12:33
Antworten mit Zitat
Fetze hat Folgendes geschrieben:
...oder hab ich da jetzt nen Denkfehler gemacht? Confused


Weis nicht... aber wenn, dann hätten wir in etwa den selben Denkfehler. Very Happy

Ich hätte die Struktur von Anfang an etwas anders gestaltet ...
aber vielleicht gibt es in der vom Mr. Silby gewählten Lösung ja auch
Vorteile, die ich bisher noch nicht ahne?

Markus2

BeitragSa, Sep 03, 2005 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Also eigentlich braucht man die Liste ja nur mit AddFirst
zu füllen dann braucht man kein Reverse Idea
 

Ava

Gast

BeitragSa, Sep 03, 2005 15:39
Antworten mit Zitat
Es sei denn, man benötigt mal die eine, mal die andere Richtung.... *soll vorkommen* .... Rolling Eyes

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group