Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - mit 2 dynamischen Arrays unabhängig voneinander arbeiten


personX - Fr 27.10.06 17:33
Titel: mit 2 dynamischen Arrays unabhängig voneinander arbeiten
Hallo,
ich habe 2 dynamische 2-dimensionale Arrays deklariert und initialisiert.
Mit dem ersten soll gearbeitet werden, d.h. Werte werden gelöscht und neu zugewiesen.
Danach soll es durch Zuweisung mit dem zweiten Array wieder wie am Anfang aussehen, sodass damit erneut gearbeitet werden kann.
z.B.:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type DynamicArray = array of array of string;

var MyArray1,MyArray2:DynamicArray;

procedure DoSomething();
begin

  // Initialisierung ...
 
  // Das zweite Array bekommt die Werte des ersten Arrays
   MyArray2:=MyArray1;
  

  {Schleife Anfang ...}
  // Mit dem ersten Array wird gearbeitet ...
  // Erstes Array auf Ausgangszustand setzen
   MyArray1:=MyArray2;
  {Schleife Ende}
             
end;


Wie ich aber rausgefunden habe, verändern sich die Werte des zweiten Arrays auch, wodurch ich den Ausgangszustand nicht mehr herstellen kann. :cry:
Hat jemand ne Lösung dafür, sodass der Ausgangszustand nicht mehr verloren gehen kann?

Danke schon mal!


Narses - Fr 27.10.06 20:16

Moin!

So kannst du kein dyn. Array kopieren, du kopierst ja nur den Zeiger mit der direkten Zuweisung. Am bestem machst du das mit einer verschachtelten Schleife. ;)

cu
Narses


personX - Sa 28.10.06 10:28

Danke für die Antwort! :zustimm:
Zitat:
Am bestem machst du das mit einer verschachtelten Schleife.

Ungefähr so?

Delphi-Quelltext
1:
2:
3:
for i:=0 to Dim1-1 do            // Dim1 = Größe der ersten  Dimension
  for j:=0 to Dim2-1 do          // Dim2 = Größe der zweiten Dimension
    MyArray1[i,j]:=MyArray2[i,j]; // Erstes Array wird wieder auf den Anfangszustand gebracht


Horst_H - Sa 28.10.06 10:45

Hallo,

gibt es nicht den Befehl Copy dafür?
Sieh mal in der Hilfe nach!
Zitat:

function Copy(S; Index, Count: Integer): string;
function Copy(S; Index, Count: Integer): array;

Beschreibung

S ist ein Ausdruck des Typs String oder dynamisches Array. Index und Count sind Integer-Ausdrücke. Copy gibt einen Teilstring oder ein Teilarray zurück, das Count Zeichen oder Elemente ab S[Index] enthält. Der Teilsstring oder das Teilarray ist eine eindeutige Kopie (d.h., Speicher wird nicht gemeinsam mit S genutzt, obwohl Zeiger- oder Objekt-Elemente des Arrays nicht kopiert werden).

Ist Index größer als die Länge von S, gibt Copy einen leeren String oder ein leeres Array zurück.

Gibt Count mehr Zeichen oder Array-Elemente an, als verfügbar sind, werden nur die Zeichen oder Elemente von S[Index] bis zum Ende von S zurückgegeben.

Hinweis: Wenn S ein dynamisches Array ist, brauchen Sie die Parameter Index und Count nicht anzugeben. Copy kopiert dann das gesamte Array.



Gruss Horst


personX - Sa 28.10.06 11:07

Zitat:
Hinweis: Wenn S ein dynamisches Array ist, brauchen Sie die Parameter Index und Count nicht anzugeben. Copy kopiert dann das gesamte Array.


Genau nach soetwas habe ich gesucht. Also, ich denke, leichter und kürzer geht es wirklich nicht mehr! :mrgreen:

Vielen Dank an alle!