Einmal musst du die Schleife trotzdem durchlaufen, denn Copy kopiert wie gesagt immer nur eine Dimension auf einmal.
Delphi-Quellcode:
type TIntArr2D = array of array of Integer;
function CopyIARR2D(aIArr: TIntArr2D): TIntArr2D;
var i: Integer;
begin
Result := copy(aIArr);
for i := 0 to high(Result) do
Result[i] := copy(aIArr[i]);
end;
procedure TForm1.Button2Click(Sender: TObject);
var a,b,c,d: TIntArr2D;
begin
setlength(a,5,5);
a[2,2] := 5;
a[3,3] := 1;
b := copy(a);
a[2,2] := 9;
b[3,3] := 3;
showmessage(inttostr(a[3,3])); // --> 3
showmessage(inttostr(b[2,2])); // --> 9
//-----------------------------------------------
setlength(c,5,5);
c[2,2] := 5;
c[3,3] := 1;
d := CopyIArr2D(c);
c[2,2] := 9;
d[3,3] := 3;
showmessage(inttostr(c[3,3])); // --> 1
showmessage(inttostr(d[2,2])); // --> 5
end;
Andernfalls besteht die Gefahr, dass du dir dein "Orignial" veränderst, wenn du mit der "falschen" Kopie arbeitest, was ein gern gemachter Fehler ist und was man auch gern übersieht.
Viele Grüße...