LinkedList umsortieren

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Farbfinsternis

Betreff: LinkedList umsortieren

BeitragFr, Jun 06, 2008 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
In meiner Liste hängen Objekte hintereinander ... man kann sich das ungefähr so vorstellen:

Code: [AUSKLAPPEN]

Obj01:TObject, Obj02:TObject, Obj03:TObject, Obj04:TObject


Nun will ich aber folgende Reigenfolge erreichen:

Code: [AUSKLAPPEN]

Obj01:TObject, Obj02:TObject, Obj04:TObject, Obj03:TObject


Meine Idee war es mir mittels FindLink den Link zum Objekt zu holen, das Objekt aus der Liste zuu entfernen und dann mit InsertLinkBefore oder InsertLinkAfter das Objekt an einer anderen Stelle wieder einzufügen ... klappt aber nicht. Das Objekt wird zwar aus der Liste gelöscht, aber nicht wieder eingefügt.

Jemand eine Idee wo mein Denkfehler liegt?

Hier mein Ansatz in Code:
Code: [AUSKLAPPEN]

Function SortLayers(layer:TLayer, direction:Byte)
   Local link:TLink = layer._list.FindLink(layer)
   If link.PrevLink() <> Null   
      layer._list.Remove(layer)
      If direction = 1
         layer._list.InsertAfterLink(layer, link)
      Else
         layer._list.InsertBeforeLink(layer, link)
      EndIf
      
      ClearGadgetItems(lbx_layer)
      
      Local i:Int      = 0
      Local ic:Int   = 0
      For Local lay:TLayer = EachIn level.layer._list
         If lay.obj = 1 Then ic = 1 Else ic = 0
         AddGadgetItem(lbx_layer, lay.title, 0, ic, "", lay)
         If lay = layer Then SelectGadgetItem(lbx_layer, i)
         i:+ 1
      Next
   EndIf
   
End Function

BtbN

BeitragFr, Jun 06, 2008 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Idee wäre jetzt, per hand die next und last einträge im Link zu verändern. Ich guck mal, ob ich da was finde.

amon

BeitragDi, Jun 24, 2008 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du schon versucht zuerst einzufügen, und nach erfolgreichen einfügen zu löschen?
 

Dreamora

BeitragDi, Jun 24, 2008 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
pack ein field _link:Tlink auf deine layer
dann beim list.addXY() das was zurück kommt dem _link zuweisen
dann kannst du next und prev in der liste nämlich einfach so rausfinden. Verschieben geht dann per
templink:tlink = _link.prevlink() ; _link.remove(); templink.addafter(self)

als beispiel für ein einfügen danach in pseudocode.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group