[Verständnis] Linked List sortieren
Übersicht

![]() |
JustusBetreff: [Verständnis] Linked List sortieren |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, diesen Titel gab es schon mal und zwar in diesem Thread https://www.blitzforum.de/viewtopic.php?t=13351 , wo FDM das selbe Problem hatte wie ich.
Nun, ich habe auch eine Klasse THighscore mit den Feldern:
Der TLink gliedert dann mittels ListAddLast() das Objekt in die highscoreList:TList ein. Ist es richtig, dass SortList nur funktioniert, wenn ich die TList irgendwie anders benutze? Auf jeden Fall habe ich den Eindruck, dass mir SortList() in dieser Angelegenheit nicht weiter hilft. Der Gedanke des Sortierens ist ja, zwei Werte (hier: score) zu vergleichen. Und wenn dann vergleichen wurde, will ich das ganze Objekt eine Listenposition nach oben oder nach unten verschieben. Doch ich weiß nicht, wie ich diesen Vergleich anstellen soll. Ich glaube ich muss die einzelnen Objekte irgendwie über ihre Links ansprechen, aber da haperts eben und ich habe keine adequate Information auftreiben können. MFG, Justus |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du musst die Method compare:int(other:object) implementieren in deinem Type:
Code: [AUSKLAPPEN] method compare:int(other:object) local highscore:THighscore = THighscore (other) if self = highscore return 0 if score - highscore.score > 0 or .. (score - highscore.score = 0 and player > highscore.player) return 1 endif return -1 end method Return 0 darf NUR dann zurück gegeben werden, wenn man die objekte als identisch ansieht, denn Remove nutzt den Return 0 zum entscheiden ob das objekt das gesuchte ist beim löschen! |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das selbe hast du bei FDM auch geschrieben und ich habe es da schon nicht verstanden ![]() Ich möchte einfach nur wissen, wie ich auf ein anderes Objekt (z.B. auf das nächste in der Liste) verweisen kann. Mit TLinks muss das doch irgendwie gehen. Und dann die TLinks innerhalb der Liste verschieben. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das solltest du nicht.
TList is das Objekt, das für die Nutzung gedacht ist. TLink ist ein Implementationsobjekt und es gibt ehrlich gesagt keinen sinnvollen Grund darauf zuzugreifen. Es birgt lediglich das risiko das dein gesamter Code zusammenbricht, wenn die Struktur innerhalb der LinkedList geändert wird. Deshalb wundert es mich, dass LinkedList den TLink net als private hat und auch noch firstlink und so anbietet ... ziemlicher OO Bruch. Aber solltes du darauf bestehen: TLink.NextLink() wird dir der nächste Link ausgeben, .PrevLink() den vorhergehenden. Code: [AUSKLAPPEN] function moveLink(link:tlink, prev:int = false) local temp:tlink if prev ' wechsel mit dem vorhergehenden temp = link.prevlink() link._prev = temp.prevlink() temp._succ = link.nextlink() link._succ = temp temp._prev = link else ' wechsel mit dem nachfolgenden temp = link.nextlink() link._succ = temp.nextlink() temp._prev = link.prevlink() temp._succ = link link._prev = temp endif end function für weitere Infos, schau ins linkedlist.mod rein |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah! Jetzt ist mir einiges klar geworden, vielen Dank. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group