![]() |
Was sind Dynamische Arrays??
Hi leute!
Ich habe ein Problem, nämlich einen schlechten Informatikunterricht. :roll: Wir haben in der Schule gelernt, dass man bei einem Array die obere Grenze von Anfang an festlegen muss. Nun stand ich aber bei Programmieren vor einem Problem. Ich wollte zum beispiel mehrere shapes erscheinen lassen, aber ich wusste nich wie viele. Die Anzahl sollte also variabel sein. Ich hab erst mal ein Array aus seeeeeehr vielen shapes erstellt. Das ist aber glaube ich nicht sehr Speicherschonend. Ich habe ein bischen im Internet gesucht und dymaische Arrays gefunden. Sie wurden immer wieder erwähnt aber eine ausreichende Anleitung hab ich nirgends gefunden. Meine Frage ist also, ob irgendwer nen tutorial kennt, oder es schnell hier posten könnte, wenn es nicht zu umfangreich ist. Dies ist mein erster Eintrag hier und meine Delphikenntnisse beschränken sich auf ein jahr informatikunterricht und einige Recherchen. Hoffe, dass ihr mir helfen könnt. |
Re: Was sind Dynamische Arrays??
Bei einem dynamischen Array ist der Name auch das Motto: Es ist in seiner Größe variabel.
Du kannst es deklarieren als "MeinArray : Array of Sonstwas" und wenn Du es brauchst, hast Du meist eine grobe Idee davon, wie groß es denn sein soll. Dann benutzt Du "SetLength(MeinArray, 5)" und setzt das Array damit auf eine Länge von 5 Elementen (die mit 0 bis 4 durchnummeriert werden). Wenn Du später merkst, dass das eng wird, dann lässt Du einfach ein neues SetLength los und vergrößerst Dein Array auf diese Weise: "SetLength(MeinArray, 10)" vergrößert Dein Array um weitere 5 Elemente auf nun insgesamt 10 Elemente. Die bisherigen Elemente bleiben erhalten, es wird einfach "angebaut". Du kannst die Größe auch verringern, dann fallen ggf. Elemente "über den Tisch". Problem an der Sache ist: Besonders effizient sind sie nicht, die dynamischen Arrays. Immer dann, wenn Du die Größe änderst, wird das Array im Speicher komplett umkopiert. Wenn Du diese Tatsache im Hinterkopf behältst und die Größe des Arrays eben nicht permanent änderst, sondern etwa immer gleich am Stück 10 oder meinetwegen auch 100 neue Elemente reservierst, kann man mit der "Nicht-Effizienz" oftmals leben. Fall nicht könnte man beispielsweise zu Listen greifen. |
Re: Was sind Dynamische Arrays??
hi Doenerimperator
und herzlich willkommen hier. als erstes vorweg, ja du hast richtig gelesen es gibt Dynamische arrays und dere Benutzung ist ganz einfach. Die genaue Erklärung kann ich dir nu nicht schreiben, weil ich gerade nicht viel zeit habe. Aber derren Nutzung sei hier mal Verraten :
Delphi-Quellcode:
Das fürs erste, evtl hat noch jemand zeit und läst noch ein paar erklärende Worte dazu raus.
type TBlub = Array of TShape; // es ist besser das als Typ zu machen weil du dadurch diesen als Parameter einer Function / Procedure übergeben kannst
(* GANZ WICHTIG alle Dynamischen Arrays fangen bei 0 an und gehen bis n -1 *) var Arr : TBlub; // So ist dann deine Variable anstatt statisch var Arr : Array[ 0.. 15 ] of Tshape n : Integer; begin // Mit Setlength bekommt das Array seine Größe, erst danach darfst du auf die Elemente zugreifen n := 10; Setlength(arr, n ); for n := 0 to 9 do arr[n] := Tshape.create(form1); // .. Ganz normal Arbeiten wie das bei statisch auch ist // vor programmende gebe ich den Speicher immer wieder frei mit setlength( arr, 0 ); Arbeiten soltlest du damit schon können. corpsman |
Re: Was sind Dynamische Arrays??
Ein Tutorial wird dazu nicht nötig sein, weil die sache eigentlich verdammt einfach ist.
Delphi-Quellcode:
Auch mehrdimensionale Arrays sind möglich:
type
TMyArray = array of integer; implementation procedute DoSth; var myarray: TMyArray; i: integer; begin setlength(MyArray, 3); // Länge des Arrays auf 3 setzen for i := 0 to high(MyArray) do // high(MyArray) gibt den höchsten Index des Arrays zurück, hier 2. // Alternative: length(MyArray) - gibt die Länge zurück, in diesem fall 3 MyArray[i] := i+1; // Zugriff auf Elemente ist wie gehabt // am Ende der procedure wird der Speicher des dynamischen Arrays automatisch wieder freigegeben end;
Delphi-Quellcode:
falls du mal mehrdimensionale arrays bracuhst, die nciht rechteckig sind, kannst du die Löngen für die Sub-Elemente auch einzeln setzen:
type
TMyArray2D = array of array of integer; implementation procedute DoSth2D; var myarray: TMyArray2D; i,j: integer; begin setlength(MyArray, 3, 4); // Länge des Arrays auf 3*4 setzen for i := 0 to high(MyArray) do for j := 0 to high(MyArray[i]) do MyArray[i,j] := ...; end;
Delphi-Quellcode:
procedute DoSth2D;
var myarray: TMyArray2D; i,j,r: integer; begin setlength(MyArray, 3); // Breite 3 for i := 0 to high(MyArray) do begin r := random(5); setlength(myarray,r); // zufällige höhe end; end; |
Re: Was sind Dynamische Arrays??
Ok, danke für eure schnellen Antworten! :thumb:
|
Re: Was sind Dynamische Arrays??
Was ich eben noch schreiben wollte, aber vergessen habe: Je nach dem, was du machen willst, solltest du dir auch mal Listen anschauen. (Stichwort
![]() |
Re: Was sind Dynamische Arrays??
Ich hoffe mal, dass das mit Delphi 2009 auch ein Ende hat.
|
Re: Was sind Dynamische Arrays??
Zitat:
Nein, auch mit Delphi 2009 funktionieren die dynamischen Arrays. :stupid: Nur lassen sie sich jetzt noch typisieren. Aber das wollte ich jemandem, der in diesem Moment sein "erstes Mal" mit diesen Arrays hat, nicht zumuten. ;-) |
Re: Was sind Dynamische Arrays??
Zitat:
|
Re: Was sind Dynamische Arrays??
@Doenerimperator:
Muss ja kein schlechter Inforamtik-Unterricht sein. Ich z.B. konnte zu meiner Zeit auch keine dynamischen Array verwenden, denn unter Delphi3 gabs die noch nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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