Klassen vs. TList
Übersicht

![]() |
bruZardBetreff: Klassen vs. TList |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe da schon wieder mal eine Anfängerfrage (nein, für Beginner wäre sie dann doch zu hart ![]() Ich suche nach einer Möglichkeit mit einer Funktionalität komplett in einer Klasse zu bleiben, anstatt ständig von aussen durch eine Funktion eingreifen zu müssen. Beispiel: Ich habe sehr oft (fast immer) mit dem Umstand zu kämpfen dass ich Listen in meinen KLassen verwende und diese die komplette Eigenschaftendefinition der Klasse benötigen. Code: [AUSKLAPPEN] Type TMyType Global list:TList Global count:Int Field id:Int Field x:Float Field y:Float Method New() If list:TList = NULL Then list:Tlist = New TList list.AddLast(Self) End Method End Type Der Zusatnd ist klar, ich habe eine Klasse mit drei Eigenschaften und erzeuge bei einem New automatisch ein neues Listenelement in list:TList. Diese Liste ist nun mit der Klasse verbunden und ich kann beliebig viele Instanzen dieser Klasse erzeugen. Aber ... ich kann die Liste nur von aussen über eine Funktion durchgehen. Meine Frage nun: Kennt jemand eine Möglichkeit diese Klasse innerhalb der Klasse per Methode oder interner Funktion zu durchforsten? |
||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hoffe das ich dich richtig verstanden habe:
Code: [AUSKLAPPEN] Type TMyType Global list:TList Global count:Int Field id:Int Field x:Float Field y:Float Method New() If list:TList = Null Then list:Tlist = New TList list.AddLast(Self) End Method Method Iterate() If List <> Null Then For Local A:TMyType = EachIn List If A = Self Then Print "Type Found (Id : " + A.ID + " )" Next Else Print "List is empty !" EndIf End Method End Type Local A:TMyType = New TMytype A.ID = 111 For Local I:Int = 1 To 100 Local B:TMyType = New TMyType B.ID = I Next A.Iterate() |
||
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
*Vor die Stirn klatsch*
Natürlich ... man sieht manchmal den Wald vor lauter Bäumen nicht. Danke! |
||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich nehme immer dynamische arrays dafür... weil dann hat man immer einen "index"
Code: [AUSKLAPPEN] Type test Field x:Int Global list:test[] Method New() list=list[..list.length+1] list[list.length-1]=Self EndMethod Method foo() For i=1 To list.length Print list[i-1].x Next EndMethod EndType test1:test=New test test1.x=123 test2:test=New test test2.x=456 test3:test=New test test3.x=789 test3.foo() PS: vorteil bei meinem code: irgendwelche IF's können entfallen - da eine FOR-Schleife mit 0-Elementen im List-Array nicht ausgeführt wird... quasi "selbstprüfendes" Codeteil. |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
+ wieder gelöscht, weil glaube ich Frage falsch verstanden +
![]() |
||
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
@TheShadow
Wie löschst du mit deiner Array-Methode ein beliebiges Element? |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Indem er alle nachfolgenden Elemente nach vorne verschiebt und das hinterste auf Null setzt? ![]() |
||
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alle? Hm, okay, dann ists ungeeignet für meine Zwecke. Hätte jetzt gedacht, man könnte das irgendwie abkürzen. | ||
Serge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, bei sowas ist so nen Variables Array natürlich ein gutes Stück langsamer, insbesondere in Listen mit vielen Elementen.
Bei ner Tlist müssen nur die Pointer anders gesetzt werden und schon ist ein Element raus ![]() |
||
http://www.dark-matter-soft.de |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nunja, man könnte auch einfach den zu löschenden Verweis mit dem letzten überschreiben und dann die Liste um 1 verkleinern. Sollte schneller sein, oder? Funktioniert einwandfrei, ich habs mal ausprobiert. Aber dann musste ich leider feststellen, dass mir das ganze an Geschwindigkeitsvorteil nur 5 FPS gebracht hat - bei 11000 Objekten. Der Zugriffsunterschied scheint bei großen Objektlisten wirklich mikroskopisch zu sein. Ich empfehle es jedem, der erwägt, seine Listen zwecks Speedoptimierung durch Arrays zu ersetzen: Um gottes Willen nur, wenn wenn es euch definitiv keine Nachteile bringt. | ||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
So gehts natürlich auch ![]() Hingegen bei Maps möchte ich nur ungern auf ein Array verzichten |
||
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Maps sind ja auch sowas von statisch, dass es nichts schaden kann *g*
Vor allem, weil ma nda wiederum den "Random Access" braucht, die Möglichkeit, nicht alles durchgehen zu müssen, sondern jedes Element einzeln abrufen zu können. *erklärbär-für-newbies-spiel* |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group