![]() |
Unbeschränkte Arrays?
Hallo,
diese Frage geht an Leute, die sich mit sauberer Programmierung auskennen. Und zwar habe ich vor, ein Programm zu schreiben, bei dem es von einer bestimmten Objektsorte (Klasse oder Record) mehrere Objekte geben soll, wobei vorher nicht bekannt ist, wieviele, bzw. sich die Anzahl im Laufe des Programms ändert. Ich habe das einmal mit verketteten Listen gemacht. Das hat gut funktioniert, ist aber ein wenig frickelei. Soweit ich gehört habe, kann man das auch mit Arrays machen, deren Größe nicht festgelegt ist. Meine Frage: Wie würdet ihr das machen? Was ich "sauberer", sinnvoller. Und welche Methode bietet welche Vor-/Nachteile? Grüße Seniman |
Re: Unbeschränkte Arrays?
Das ganze kannst du mit dynamischen Arrays lösen:
Delphi-Quellcode:
Wenn du aber die Länge des Arrays auf n setzt, gehen die Indexe der Elemente von 0 bis n-1!!
var
MeinArray: array of TMeinTyp; //... setLength(MeinArray, 10); //Länge des Arrays auf 10 Elemente setzen Wenn dus sauber nach OOP-Regeln erledigen willst, gibts eine eigene Klasse dafür *gleich nachguck, wie die nochmal heißt....* Edit: Guck dir im Fall mal ![]() ![]() |
Re: Unbeschränkte Arrays?
Es gibt noch die Funktion High.
Sie erwartet als Parameter ein Array und gibt dessen höchstes Element zurück. Dann musst du nicht mehr for I:=0 to length(arr)-1 do schreiben sondern for I:=0 to high(arr) do |
Re: Unbeschränkte Arrays?
ich würde dir eine TList empfehlen, das ist intern mit arrays gelöst...
da macht man einfach nur Liste.Add(Pointer) und hat den pointer (auf das object/den record) in der liste... desweiteren gibts delete, move, exchange, clear.... |
Re: Unbeschränkte Arrays?
Verbraucht aber wahrscheinlich auch mehr Speicherplatz im RAM, oder?
|
Re: Unbeschränkte Arrays?
bestimmt da ja noch die klassen-konstrukte mit im speicher sind.
|
Re: Unbeschränkte Arrays?
Zitat:
Ja, aber nicht viel. Ein paar Bytes für das Objekt selbst, das wars. Aber wichtig: Bei TList immer hintereinander .Add aufzurufen müllt den Speicher genauso zu wie bei dyn. Arrays ständig SetLength(arr, Length(arr)+1) aufzurufen. Bei TList gibt es die Property Capacity, die die Kapazität, sprich die Größe des allozierten Speichers, festlegt. |
Re: Unbeschränkte Arrays?
bei TList ist es aber eben so das nicht bei jedem add speicher reserviert wird sondern bei einem add wird immer gleich etwas mehr speicher reserviert so das nur bei jedem dritten oder 4ten add wirklich speicher allociert wird.
|
Re: Unbeschränkte Arrays?
Echt?
Ich hatte das anders in Erinnerung. Muss wohl mal wieder Delphi installieren und kucken ;) |
Re: Unbeschränkte Arrays?
bei add wird "Grow" aufgerufen falls speicher benötigt wird. Und in Grow wird dann entsprechend "FCapacity" mehr speicher allociert als benötigt wird
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz