Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi - Mehrdimensionale Arrays (https://www.delphipraxis.net/194415-delphi-mehrdimensionale-arrays.html)

jsphde 17. Nov 2017 16:13

Delphi-Version: 7

Delphi - Mehrdimensionale Arrays
 
Guten Tag,

vorab möchte ich erwähnen, dass ich mich bisher noch nicht so lange mit Delphi beschäftigt habe (ca. 1 Monat)...

Wie der Titel schon verrät, habe ich ein Problem mit mehrdimensionalen Arrays.

Mein Vorhaben:
Ich möchte in einem Array ein weiteres Array speichern.
Mein Idee:
Delphi-Quellcode:
var
  Arr: Array of Array;


  SetLength(Arr, 3);
  Arr[0]:=Array[0..1] of String = ('x', 'y', 'z');
  Arr[1]:=Array[0..1] of Byte = (10, 20, 30);
  Arr[2]:=Array[0..1] of Boolean = (True, False, True);
Auf die Daten sollte dann so zugegriffen werden:
Arr[0][0] ==> x
Arr[0][1] ==> 10
Arr[0][2] ==> True

Vielleicht kann mir jemand dabei helfen...
Wie gesagt, bin ich noch ein Anfänger in Delphi.

Mit freundlichen Grüßen

Redeemer 17. Nov 2017 16:20

AW: Delphi - Mehrdimensionale Arrays
 
Das geht mit
Delphi-Quellcode:
array of array of Typ
.

Ein Array ist jedoch per Definition eine Datenstruktur aus Variablen des gleichen Typs.
Datenstrukturen aus unterschiedliche Typen nennt man
Delphi-Quellcode:
record
oder Klasse, kann deren unterschiedliche enthaltene Typen jedoch nicht per Index ansprechen.

Delphi-Quellcode:
type TMeinTyp = record
  MeinString: string;
  MeinInteger: Integer;
  MeinBoolean: Boolean
end;

var
  MeinArray: array[0..1] of TMeinTyp;

...

MeinArray[0].MeinString := 'Hallo';

jsphde 17. Nov 2017 16:36

AW: Delphi - Mehrdimensionale Arrays
 
Vielen Dank für deine Antwort.

Ich hätte zu diesem Thema noch folgende Frage:

Kann man ein ganzes Array direkt zuweisen?
Delphi-Quellcode:
var
  Arr: Array of Array of String;

SetLength(Arr, 2);
SetLength(Arr[0], 2);
SetLength(Arr[1], 2);
Arr[0]:=('x', 'y');
Arr[1]:=('y', 'z');
Ich habe hierzu schon ein paar Beispiele gefunden, jedoch fand ich keine aussagekräftige Antwort.

MfG

Redeemer 17. Nov 2017 16:45

AW: Delphi - Mehrdimensionale Arrays
 
Nein, Arrays kann man nicht zuweisen. Man kann sie auch nicht einander zuweisen oder sie mit einer Funktion zurückgeben (das Übergeben an eine Funktion funktioniert hingegen). Einige der Einschränkungen kann man umgehen, indem man einen Typ definiert (da bin ich mir aber nicht ganz sicher). Der bekannteste dieser Arraytypen ist TBytes, der in Delphis RTL allgegenwärtig ist.

jsphde 17. Nov 2017 16:57

AW: Delphi - Mehrdimensionale Arrays
 
Okay.
Also muss ich die vordefinierten Daten manuell zuweisen?

1. Arr[0].Strings := 'xy'; Arr[1].Strings := 'yz';

oder

2. var Arr: Array[0..1] of String = ('xy', 'yz');

MfG

nahpets 17. Nov 2017 16:59

AW: Delphi - Mehrdimensionale Arrays
 
Unabhängig von der Sinnhaftigkeit meines Beispiels, sowas geht:
Delphi-Quellcode:
program Test;

type
  tArrayOfInteger       = Array of Integer;
  tArrayOfArrayOfInteger = Array of tArrayOfInteger;
var
  EinMalEins : tArrayOfArrayOfInteger;
  i,k: Integer;
begin
  SetLength(EinMalEins,11);
  for i := low(EinMalEins) to high(EinMalEins) do SetLength(EinMalEins[i],11);
  WriteLn('EinmalEins berechnen:');
  for i := low(EinMalEins) to high(EinMalEins) do begin
    for k := low(EinMalEins[i]) to high(EinMalEins[i]) do begin
      EinMalEins[i][k] := i * k;
    end;
  end;
  WriteLn('EinmalEins ausgeben:');
  for i := low(EinMalEins) to high(EinMalEins) do begin
    for k := low(EinMalEins[i]) to high(EinMalEins[i]) do begin
      WriteLn(Format('i: %.3d, k: %.3d => %.3d',[i,k,EinMalEins[i][k]]));
    end;
  end;
 
  WriteLn('Irgendwas zuweisen');
  EinMalEins[0] := [100,200,300,400,500,600,700,800,900,000,110,120,130,140,150,160,170,180,190,200];
  WriteLn('Irgendwas ausgeben:');
  for i := low(EinMalEins) to high(EinMalEins) do begin
    for k := low(EinMalEins[i]) to high(EinMalEins[i]) do begin
      WriteLn(Format('i: %.3d, k: %.3d => %.3d',[i,k,EinMalEins[i][k]]));
    end;
  end;
end.

jsphde 17. Nov 2017 17:08

AW: Delphi - Mehrdimensionale Arrays
 
Vielen Dank! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 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