Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamic Array Einfache Zuweisung (https://www.delphipraxis.net/186855-dynamic-array-einfache-zuweisung.html)

amoibos 7. Okt 2015 05:43

Delphi-Version: 5

Dynamic Array Einfache Zuweisung
 
Hallo,
ich bin auf der Suche nach einem Konstrukt mit dem man Zuweisungen weniger umständlich gestalten kann. Dabei hab ich folgenden Hinweis gesehen, nur funktioniert der nicht mit meiner Version. Kurzum das soll der Compiler akzeptieren:

Code:
type
  TIntArray = array of integer;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyArr: TIntArray;
begin
  MyArr := TIntArray.Create(10, 20, 30, 40);
end;
Stattdessen gibts:
Zitat:

Object or class type required.

Dejan Vu 7. Okt 2015 06:14

AW: Dynamic Array Einfache Zuweisung
 
Du deklarierst einen Vektor ('Array of integer') und willst daraus dann eine Matrix (Array of Array of integer) basteln. Das kann doch gar nicht funktionieren:
Delphi-Quellcode:
Var
  Vektor : Array of integer;
  Matrix : Array Of Integer;
  i : Integer;

begin
  SetLength(Vektor,20); // Der Vektor hat nun 20 Elemente. Vektor[0]..Vektor[19];
  SetLength (Matrix,30); // Die Matrix hat nun 30 Zeilen
  for i:=0 to Length(Matrix) do
    SetLength(Matrix[i],40); // Jede Zeile hat 40 Spalten
Wenn Du das einfacher/anders haben willst, dann bau Dir deine Methoden nach deiner Facon.

Ich würde das sowieso nicht so machen, sondern eine Matrix hinter einem Interface/Klasse kapseln.

bernau 7. Okt 2015 06:45

AW: Dynamic Array Einfache Zuweisung
 
@amoibos: Du benutzt Delphi5? Die Version kann das nicht. Mit meinem XE8 funktioniert es.

bernau 7. Okt 2015 06:48

AW: Dynamic Array Einfache Zuweisung
 
Zitat:

Zitat von Dejan Vu (Beitrag 1317841)
Du deklarierst einen Vektor ('Array of integer') und willst daraus dann eine Matrix (Array of Array of integer) basteln.

Wo steht, daß er ein "Array of Array of integer" deklarieren will. Er will eigentlich nur eine einfache Art der Initialisierung einen eindimensionalen Arrays erreichen. Oder ich habe etwas falsch verstanden?

mkinzler 7. Okt 2015 06:57

AW: Dynamic Array Einfache Zuweisung
 
Record Helper, welche in dem Beispiel verwendet werden gab es aber bei D5 noch nicht. Class Helpers gab es ab D2010, record helpers kamen noch später.

Zoot 7. Okt 2015 07:02

AW: Dynamic Array Einfache Zuweisung
 
Komischer Thread.
In der Frage wird nirgends ein Array of Array erwähnt, und Record Helper kommen auch nirgends vor.
Von daher verwundern einige Antworten.

Uwe Raabe 7. Okt 2015 07:05

AW: Dynamic Array Einfache Zuweisung
 
Soweit ich weiß, gibt es diesen Array-Constructor seit D2007. Für alles darunter ist wohl Handarbeit angesagt - oder halt ein Update...

Dejan Vu 7. Okt 2015 07:09

AW: Dynamic Array Einfache Zuweisung
 
Zitat:

Zitat von amoibos (Beitrag 1317839)
Code:
var
  MyArr: TIntArray;
begin
  MyArr := TIntArray.Create(10, 20, 30, 40);
end;

Für mich sieht das nach einem Versuch aus, ein zweidimensionales Array zu erzeugen. Anders sind die 4 Zahlen für mich nicht erklärbar. 2D-Array => Matrix. Wenn ich falsch lag, bitte bessere Interpretation.... Ach... Ein Vektor mit vier Werten...? :wall:

Isolde! Du hast wieder den koffeinfreien Kaffee erwischt!

HolgerX 7. Okt 2015 07:12

AW: Dynamic Array Einfache Zuweisung
 
Mit einer kleinen Hilfsfunktion geht das schon etwas einfacher:

Delphi-Quellcode:
type
  TIntArray = array of integer;

function GetIntArray(AIntArr : array of integer):TIntArray;
begin
  setlength(result,length(AIntArr));
  move(AIntArr[0],result[0],length(AIntArr)* SizeOf(integer));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyArr: TIntArray;
begin
  MyArr := GetIntArray([10, 20, 30, 40]);
  // ...
end;
Sollte auch unter Delphi 5 laufen, habe es aber nur mit Delphi 6 getestet.

Alternative:

Delphi-Quellcode:
procedure FillIntArray(AIntArr : array of integer;var AMyArr : TIntArray);
begin
  setlength(AMyArr,length(AIntArr));
  move(AIntArr[0],AMyArr[0],length(AIntArr)* SizeOf(integer));
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  MyArr: TIntArray;
begin
  FillIntArray([10, 20, 30, 40], MyArr);

bernau 7. Okt 2015 07:40

AW: Dynamic Array Einfache Zuweisung
 
Zitat:

Zitat von Dejan Vu (Beitrag 1317855)
Isolde! Du hast wieder den koffeinfreien Kaffee erwischt!

Kenne ich! Immer wieder beruhigend, daß es anderen auch so geht. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.
Seite 1 von 2  1 2      

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