Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array-Variable innerhalb einer Prozedur definieren (https://www.delphipraxis.net/98738-array-variable-innerhalb-einer-prozedur-definieren.html)

qb-tim 31. Aug 2007 14:10


Array-Variable innerhalb einer Prozedur definieren
 
Hi,

ich möchte ein Array definieren, dessen Größe aber von einer von einer Prozedur erzeugten Variablen abhängig sein soll (z.Bsp: var AnzahlArray: Integer).

Ist das möglich? Wie stelle ich das an?

jim_raynor 31. Aug 2007 14:11

Re: Array-Variable innerhalb einer Prozedur definieren
 
Das was du suchst sind dynamische Arrays. Also:

Delphi-Quellcode:
var
  Arr: Array of ...;

begin
  ...
  SetLength(Arr,AnzahlArray);
end;

Ghostwalker 31. Aug 2007 14:13

Re: Array-Variable innerhalb einer Prozedur definieren
 
Beispiel:

Delphi-Quellcode:
   Procedure DynamicArray(size:integer);
   var
     arr : array of byte;
   begin
     SetLength(arr,size);//Array dimensionieren auf die übergebene größe
     {tu was damit}
     SetLength(arr,0);//array wieder freigeben
   end;
hoffe das hilft :)

qb-tim 31. Aug 2007 14:18

Re: Array-Variable innerhalb einer Prozedur definieren
 
Danke :thumb:

Zitat:

Zitat von Ghostwalker
hoffe das hilft :)

Es hilft sehr :dp: :cheers: :dp:

RavenIV 31. Aug 2007 14:26

Re: Array-Variable innerhalb einer Prozedur definieren
 
Was findet ihr nur immer an den Arrays so toll.
Nimm doch eine Liste, dann bist Du flexibler.

bernau 31. Aug 2007 15:49

Re: Array-Variable innerhalb einer Prozedur definieren
 
Zitat:

Zitat von RavenIV
Was findet ihr nur immer an den Arrays so toll.
Nimm doch eine Liste, dann bist Du flexibler.

Du hast halb recht :lol:

Wenn man ein eindimensionales array vom Type String oder Integer benötigt, dann verwende ich auch meist eine Liste.

Manchmal braucht man aber auch eine komplexere Liste, in der man z.B. Name Strasse und Ort benötigt.

Dann definiere ich ein Record und deklariere ein array of MyAdressRecord.

Ist einfach schneller gecoded, als wenn ich die Adresse in ein Object verfrachte und die Objekte einer TList zufüge. Wenn allerdings häufiger Elemente der Liste hinzugefügt oder eher noch entfernt werden müssen, dann verwende ich natürlich lieber Objekte als ein Array.

Aber wenn wir bald Generics haben sieht das alles wieder ganz anders aus :-D

Ghostwalker 31. Aug 2007 16:15

Re: Array-Variable innerhalb einer Prozedur definieren
 
Zitat:

Zitat von bernau

Du hast halb recht :lol:

Wenn man ein eindimensionales array vom Type String oder Integer benötigt, dann verwende ich auch meist eine Liste.

Manchmal braucht man aber auch eine komplexere Liste, in der man z.B. Name Strasse und Ort benötigt.

Dann definiere ich ein Record und deklariere ein array of MyAdressRecord.

Ist einfach schneller gecoded, als wenn ich die Adresse in ein Object verfrachte und die Objekte einer TList zufüge. Wenn allerdings häufiger Elemente der Liste hinzugefügt oder eher noch entfernt werden müssen, dann verwende ich natürlich lieber Objekte als ein Array.

Aber wenn wir bald Generics haben sieht das alles wieder ganz anders aus :-D

Ähm...du hast auch nur halb recht.*G*

Die Frage ist eher, was man mit den Daten anstellen will. Dabei ists egal ob man nun einen Record hat oder nur einen einfachen Typen. Außerdem muß man für ein TList, einen Record nicht in ein TObject verfrachten, es reicht auch ein einfacher Zeiger aus.

Wie gesagt, wichtiger ist, was man damit anstellen will. Für umfangreichere Bearbeitungen (Hinzufügen, löschen usw.) ist TList besser geeignet, da sie einfacher zu handhaben ist und für viele Bearbeitungen bereits entsprechende Methoden hat. Für einfaches Zwischenspeichern z.B. ist ein offenes Array wesentlich einfacher :)

bernau 3. Sep 2007 08:06

Re: Array-Variable innerhalb einer Prozedur definieren
 
Zitat:

Zitat von Ghostwalker
Ähm...du hast auch nur halb recht.*G*

Ach männooo :-(

Zitat:

Zitat von Ghostwalker
Außerdem muß man für ein TList, einen Record nicht in ein TObject verfrachten, es reicht auch ein einfacher Zeiger aus.

Aber den Speicher für die Records hast du vorher mit "New" reserviert. Oder? Den musst du natürlich auch wieder manuell freigeben. Da definiere ich mir lieber ein Objekt und füge diesen in eine TObjetList ein. Dann muss ich mich nicht mehr um's freigeben kümmern.

Zitat:

Zitat von Ghostwalker
Wie gesagt, wichtiger ist, was man damit anstellen will. Für umfangreichere Bearbeitungen (Hinzufügen, löschen usw.) ist TList besser geeignet, da sie einfacher zu handhaben ist und für viele Bearbeitungen bereits entsprechende Methoden hat. Für einfaches Zwischenspeichern z.B. ist ein offenes Array wesentlich einfacher :)

Das ist eigendlich auch da, was ich in meinem vorherigen Posting beschrieben habe.


Gerd


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz