Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unbeschränkte Arrays? (https://www.delphipraxis.net/43847-unbeschraenkte-arrays.html)

Seniman 9. Apr 2005 15:28


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

JasonDX 9. Apr 2005 15:38

Re: Unbeschränkte Arrays?
 
Das ganze kannst du mit dynamischen Arrays lösen:
Delphi-Quellcode:
var
  MeinArray: array of TMeinTyp;
//...
  setLength(MeinArray, 10); //Länge des Arrays auf 10 Elemente setzen
Wenn du aber die Länge des Arrays auf n setzt, gehen die Indexe der Elemente von 0 bis n-1!!

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 Hier im Forum suchenTList oderHier im Forum suchenTObjectList an

3_of_8 9. Apr 2005 19:30

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

SirThornberry 9. Apr 2005 19:35

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....

3_of_8 9. Apr 2005 19:37

Re: Unbeschränkte Arrays?
 
Verbraucht aber wahrscheinlich auch mehr Speicherplatz im RAM, oder?

SirThornberry 9. Apr 2005 19:48

Re: Unbeschränkte Arrays?
 
bestimmt da ja noch die klassen-konstrukte mit im speicher sind.

Chewie 9. Apr 2005 20:20

Re: Unbeschränkte Arrays?
 
Zitat:

Zitat von 3_of_8
Verbraucht aber wahrscheinlich auch mehr Speicherplatz im RAM, oder?


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.

SirThornberry 9. Apr 2005 21:19

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.

Chewie 9. Apr 2005 21:22

Re: Unbeschränkte Arrays?
 
Echt?
Ich hatte das anders in Erinnerung. Muss wohl mal wieder Delphi installieren und kucken ;)

SirThornberry 9. Apr 2005 21:24

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