Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   länge eines 2-Dimensionalen und Dynamischen Array (https://www.delphipraxis.net/135754-laenge-eines-2-dimensionalen-und-dynamischen-array.html)

Teekeks 17. Jun 2009 09:34


länge eines 2-Dimensionalen und Dynamischen Array
 
Hallo!
Kann mir jemand sagen wie ich bei einem 2-Dimensionalen und Dynamischen Array die längen feststellen kann?

gruß Teekeks

Hybrid666 17. Jun 2009 09:40

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
wie sieht denn der array aus?

also wenn so:

Delphi-Quellcode:
var
  myArray : array of array of Integer;
dann so:

Delphi-Quellcode:
  Length (myArray);
  Length (myArray[0]);
also damit bekommste afaik die länge in x und y richtung (wenn mich nicht alles täuscht).

Wenn du Length mit High ersetzt, bekommst du jeweils den höchsten index.

MfG

Teekeks 17. Jun 2009 09:50

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
und wie spreche ich das dann konkret an? also auch so:
Delphi-Quellcode:
thearray[x,y]:={irgentwas};
oder wie?

Hybrid666 17. Jun 2009 09:55

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
wenn du mir deine deklaration zeigen würdest könnt ich es dir sagen, meine variante die ich gepostet hab spricht man mit

Delphi-Quellcode:
myArray[x][y] := 12356
an, man muss aber auch für alle arrays über setlength die länge setzen mit:

Delphi-Quellcode:
const
  X = 10;
  Y = 15;
var
  I : Integer;
begin
  SetLength (myArray,X);
  for I := 0 to High (myArray) do
    SetLength (myArray[I],Y);
end;
Das würde den dynamischen array auf 10x15 felder setzen, aber obs andere möglichkeiten gibt, ka...

Teekeks 17. Jun 2009 09:59

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
hi Danke für deine hilfe.
Mein Array sieht genauso aus wie deins (ich hab nur ´n Record als Type dahinter).
Ich hatte in erinnerung das Setlength so geht:
Delphi-Quellcode:
setlength(thearray,x,y);
Aber da hat der Debugger gemeckert.

Hybrid666 17. Jun 2009 10:03

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
Zitat:

For dynamic arrays, SetLength may take more than one length parameter (up to the number of array dimensions). Each parameter specifies the number of elements along a particular dimension.
Delphi-Quellcode:
  SetLength (myArray,10,10);
funzt bei mir mit meinen integer array wunderbar (wieder was gelernt :D).

Haste ma die genaue meldung?

MfG

himitsu 17. Jun 2009 10:03

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
@Hybrid666: deine Variante kann man auch mit myArray[x, y] ansprechen

und eigentlich ging das mit dem SetLength auch so ... ansonten geht auch jede Ebene einzeln (praktisch wie in "dann so:" aus der #2, nur halt mit Set davor)

Teekeks 17. Jun 2009 10:19

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
ich hab gerade festgestellt das die 3 SEHHR hübschen Meldungen die ich gektigt habe mit was anderem zusammenhängen, ich hab einfach das hier gemacht:
Delphi-Quellcode:
dynarray1:=dynarray2;
und das geht ja erfahrungsweise nicht ^^.

Hybrid666 17. Jun 2009 10:24

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
ne, ist eher schlecht das :D

Teekeks 17. Jun 2009 10:32

Re: länge eines 2-Dimensionalen und Dynamischen Array
 
Hm... hier krig ich nem Speicherzugrifsfehler:
Delphi-Quellcode:
procedure TGame.InsertMap(aMap: TMap);
var x:integer;
begin
  _Act_X:=0;
  _Act_Y:=0;
  _Map_X:=Length(aMap);
  _Map_Y:=Length(amap[0]);
  Setlength(_Map,_Map_X+1);
  for x:=0 to _Map_X do
    setlength(_map[x],_Map_Y+1);
  _Map:=copy(aMap);// hier krig ich den Fehler...
end;

// so wird aufgerufen:
procedure TForm1.Button1Click(Sender: TObject);
var amap:TMap;
    x,y:integer;
    afield:TField;
begin
  SetLength(amap,31);
  for x:=0 to 30 do
    Setlength(amap[x],31);
  afield.Field:='w';
  afield.Player:='0';
  for x:=0 to 30 do
    for y:=0 to 30 do
      amap[x][y]:=afield;
  amap[1][3].Field:='#';
  Map.InsertMap(amap);
  Map.SaveMap('test2');

end;

// TMap ist so deklariert:
  TField=   record
      Field:char;
      Player:char;
    end;

  TMap= array of array of TField;
wisst ihr woran das liegen mag?


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