Liste After?
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: Liste After? |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi ich stecke an einem kleinen problem fest, und zwar geht es darum ein eintrag in einer liste zu bekommen zwischen 2 objekten.
z.b. Code: [AUSKLAPPEN] Global PlayerList:TList = New TList
Type TPlayer Field Name:String, Punkte:Int End Type Function ADD_Player (Name:String, Punkte:Int) Local P:TPlayer = New TPlayer P.Name = Name P.Punkte = Punkte PlayerList.AddLast P End Function ADD_Player ("Spieler 1", 10) ADD_Player ("Spieler 2", 10) '-<<<<<<<<<<<<<<<<<<<< Hier soll später z.b. Player 3 rein... ADD_Player ("Spieler 4", 10) ich brauche dies weniger für player und score ehr für eine textarea... dies bsp soll nur zur ansicht dienen... also in der liste vom code oben steht nun spieler 1, spieler 2 und spieler 4 .... aber was ist wenn man im nachhinein spieler 3 zwischen spieler 2 und 4 einbringen möchte? zu blitzbasic zeiten war es meines wissen nach after & before ... wie nun? |
||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Liste komplett neu erstellen, anders geht es nicht. Du könntest auch händisch die Tlink-Objekte ändern, aber idR. wird ein neuerstellen der Liste schneller und einfacher sein.
Das geht in Ordnung wenn nur selten ein Objekt gezielt eingefügt werden muss. Ansonsten ist TList nicht Mittel der Wahl. Je nachdem was du vorhast könnte eventuell eine TMap was für dich sein, das ist ein binärer Baum. Wenn es Dir um eine Reihenfolge geht könntest Du die Liste auch mittels list.sort() ordnen lassen, dann musst du allerdings eine passende Compare-Funktion schreiben. Diese kann dann ein Feld deines Types als Ordnungskriterium verwenden (zB eine ID). |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
jo an compare habe ich zuerst gedacht aber ich denke dann wird neu erstellen auch meine wahl werden... (da es ja nur neu erstellt werden muss wenn man im textarea "enter" drückt. | ||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn es für eine Textarea ist wäre vielleicht das gute alte Array die beste Variante. Arrayinhalte austauschen geht ja recht fix, und on-the-fly redimensionieren ist auch kein Problem. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch doch, so eine Funktion gibt es eh, nur nicht als globale Funktion sondern als Methode:
TList.insertBeforeLink / TList.insertAfterLink |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das war es was ich mit Du könntest auch die TLink-Objekte Händisch ändern meinte. Immerhin muss man ja erst mal den Link erlangen, dann einfügen. Ist also machbar, aber mit Mehraufwand verbunden. Ich bleibe aber dabei: Bei einer Textarea wäre ein Array Mittel der Wahl. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] SuperStrict
Type TListExt Extends TList Method After(obj:Object , value:Object) Local link:TLink = Self.FindLink(obj:Object) Self.InsertAfterLink(value , link) End Method Method Before(obj:Object , value:Object) Local link:TLink = Self.FindLink(obj:Object) Self.InsertBeforeLink(value , link) End Method End Type Local list:TListExt = New TListExt list.addlast("bla") list.addlast("blubb") list.After("bla" , "bazong") For Local s:String = EachIn list Print s Next Hier ein kleines Beispiel wie man das mit einer erweiterten Klasse lösen kann. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke, so ist es wohl am Besten gelöst. Wenn man eine Struktur hat, durch die man üblicherweise nur durchiteriert (also nicht direkt Element X haben will), die sich oft ändert, dann ist eine LinkedList genau das Richtige.
Das Einfügen in ein Array ist vergleichsweise recht aufwändig, da man hier jedes Mal quasi das ganze Array neu schreiben muss. Dafür hat man schnelleren Direktzugriff auf einzelne Objekte nach Index. Eine Map wäre hier völlig fehl am Platz, soweit ich das Problem verstehe, da sie keine Ordnung/Reihenfolge behält. Auch kann man nicht direkt über die Map iterieren, sondern müsste erst z.B. eine Liste von Schlüsseln erstellen, über die man dann iteriert. Eine Map lässt sich zwar mit binären Bäumen realisieren, wird aber viel häufiger mit einer Hashtabelle (Hashmap) gemacht. Maps sind sehr gut, wenn man direkten Zugriff über einen Namen/Key braucht. Dort sind sie sehr schnell, alles andere können sie dafür nur mit Workarounds über andere Datenstrukturen. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group