Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Was sind Dynamische Arrays?? (https://www.delphipraxis.net/121585-sind-dynamische-arrays.html)

Doenerimperator 30. Sep 2008 20:44


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.

Gerome 30. Sep 2008 20:51

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.

Corpsman 30. Sep 2008 20:55

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:
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 );
Das fürs erste, evtl hat noch jemand zeit und läst noch ein paar erklärende Worte dazu raus.
Arbeiten soltlest du damit schon können.

corpsman

Namenloser 30. Sep 2008 20:57

Re: Was sind Dynamische Arrays??
 
Ein Tutorial wird dazu nicht nötig sein, weil die sache eigentlich verdammt einfach ist.
Delphi-Quellcode:
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;
Auch mehrdimensionale Arrays sind möglich:
Delphi-Quellcode:
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;
falls du mal mehrdimensionale arrays bracuhst, die nciht rechteckig sind, kannst du die Löngen für die Sub-Elemente auch einzeln setzen:
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;

Doenerimperator 30. Sep 2008 21:02

Re: Was sind Dynamische Arrays??
 
Ok, danke für eure schnellen Antworten! :thumb:

Namenloser 30. Sep 2008 21:05

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 Delphi-Referenz durchsuchenTList. Es gibt bereits einige abgelietete Klassen für verschiedene datentypen, z.b. TStringlist, und eine TIntegerlist gibt es afair auch)

Apollonius 30. Sep 2008 21:11

Re: Was sind Dynamische Arrays??
 
Ich hoffe mal, dass das mit Delphi 2009 auch ein Ende hat.

Gerome 30. Sep 2008 21:13

Re: Was sind Dynamische Arrays??
 
Zitat:

Zitat von Apollonius
Ich hoffe mal, dass das mit Delphi 2009 auch ein Ende hat.

:gruebel:
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. ;-)

Namenloser 30. Sep 2008 21:17

Re: Was sind Dynamische Arrays??
 
Zitat:

Zitat von Gérome
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. ;-)

Ich denke er meinte die Stringliste und die Integerliste.

brechi 1. Okt 2008 12:36

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.
Seite 1 von 2  1 2      

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