AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi - Mehrdimensionale Arrays

Ein Thema von jsphde · begonnen am 17. Nov 2017 · letzter Beitrag vom 17. Nov 2017
Antwort Antwort
jsphde

Registriert seit: 14. Nov 2017
14 Beiträge
 
#1

Delphi - Mehrdimensionale Arrays

  Alt 17. Nov 2017, 17:13
Delphi-Version: 7
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

Geändert von jsphde (17. Nov 2017 um 17:35 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
814 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Delphi - Mehrdimensionale Arrays

  Alt 17. Nov 2017, 17:20
Das geht mit array of array of Typ .

Ein Array ist jedoch per Definition eine Datenstruktur aus Variablen des gleichen Typs.
Datenstrukturen aus unterschiedliche Typen nennt man 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';
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
jsphde

Registriert seit: 14. Nov 2017
14 Beiträge
 
#3

AW: Delphi - Mehrdimensionale Arrays

  Alt 17. Nov 2017, 17:36
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
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
814 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Delphi - Mehrdimensionale Arrays

  Alt 17. Nov 2017, 17:45
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
jsphde

Registriert seit: 14. Nov 2017
14 Beiträge
 
#5

AW: Delphi - Mehrdimensionale Arrays

  Alt 17. Nov 2017, 17:57
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Delphi - Mehrdimensionale Arrays

  Alt 17. Nov 2017, 17:59
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.
  Mit Zitat antworten Zitat
jsphde

Registriert seit: 14. Nov 2017
14 Beiträge
 
#7

AW: Delphi - Mehrdimensionale Arrays

  Alt 17. Nov 2017, 18:08
Vielen Dank!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf