TList rückwärts durchgehen?
Übersicht

![]() |
FetzeBetreff: TList rückwärts durchgehen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann man eine TList möglichst mithilfe von EachIn rückwärts durchgehen? Wenn ja, wie? | ||
AvaGast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das würde den Zweck erfüllen. Aber ist das nicht ziemlich langsam? o_O | ||
![]() |
Suco-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
AvaGast |
![]() 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. ![]() *sich an Kopf fass* Wenn das auch so geht, schreit das ja förmlich nach Ausbesserung!! ![]() |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ... |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@TheShadow
Oh, da hat Mark sich das aber einfach gemacht ![]() Wo steckt das denn drinne ? Habe jetzt keine Lust zu suchen . |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Markus2 hat Folgendes geschrieben: Oh, da hat Mark sich das aber einfach gemacht
![]() 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! ![]() *sieht jetzt noch mehr Optimierungsbedarf für ihren Code* arhhh ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Ava
Hätte auch nicht gedacht das es in BMax geschrieben ist . Aber auf B.Com gibt es schon einen Thread mit Module Tweaks ![]() |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Listen sind soo umständlich... |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ![]() |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Fetze hat Folgendes geschrieben: ...oder hab ich da jetzt nen Denkfehler gemacht?
![]() Weis nicht... aber wenn, dann hätten wir in etwa den selben Denkfehler. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also eigentlich braucht man die Liste ja nur mit AddFirst
zu füllen dann braucht man kein Reverse ![]() |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Es sei denn, man benötigt mal die eine, mal die andere Richtung.... *soll vorkommen* .... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group