Dynamische Arrays
Um mal kurz etwas zu den Begriffen zu sagen. Ein statisches Array ist ein Array, das seine Größe behält. Ein dynamisches Array ist ein Array, das seine Größe ändert. In der Regel werden Arrays mit einer festen Größe (also statische Arrays) benutzt. Diese können nun statisch angelegt sein:
type PMyArray = ^TMyArray; TMyArray = array[1..100] of Byte; var a : TMyArray; begin a[50]:=10; end;
oder dynamisch erzeugt werden:
var a : PMyArray; begin GetMem(a, 100*SizeOf(Byte)); try a^[50]:=10; finally FreeMem(a, 100*SizeOf(Byte)); end; end;
Die sogenannten dynamischen Arrays funktionieren in etwa so wie das zweite Beispiel, nur kümmert sich der Compiler um den Speicher.Weiterer Vorteil, der Compiler kopiert das Array automatisch um, wennsich die Größe ändert.Je nach Anwendungsfall kann die TList eine sinnvolle Alternativedarstellen.Seit ein paar Delphi Versionen gibt es dynamische Arrays von Haus aus. Bevor man mit ihnen Arbeiten kann muss man die Größe festlegen. Dies macht man mit SetLength. In Schleifen kann der höchste und niedrigste Wert des Arrays mit Low() bzw High() ermittelt werden.
procedure TForm1.Button1Click(Sender: TObject); var Feld: array of char; i: Integer; begin SetLength(Feld, 100); for i:=Low(Feld) to High(Feld) do Feld[i]:='C'; end;
Dynamische Array stehen erst ab Delphi 4 zur Verfügung.Ein mehrdimensionales, dynamisches Array müßen sie wie folgt deklarieren:
var myarray: array of array of string;
Die Größe können sie dann mit setLength folgender Maßen anpassen:
setlength(myarray,3,6);
Mehrdimensionale, dynamische Arrays können auch ungleichmäßig sein:
var myarray: array of array of string; setlength(myarray,3); //Anzahl der Zeilen auf 5 setzen setlength(myarray[0],2); //Anzahl der Spalten für Zeile 1 setlength(myarray[1],7); //Anzahl der Spalten für Zeile 2 setlength(myarray[2],5); //Anzahl der Spalten für Zeile 3
Ein solches Array hätte folgenden Aufbau (Jedes O ist ein Element):
O O O O O O O O O O O O O O
Dynamische Arrays stehen erst ab Delphi 4 zur Verfügunung