2009-06-11 13 views
8

Tengo una matriz constante fijaCopiar matriz const de matriz dinámica en Delphi

constAry1: array [1..10] of byte = (1,2,3,4,5,6,7,8,9,10); 

y una matriz dinámica

dynAry1: array of byte; 

¿Cuál es la manera más fácil de copiar los valores de constAry1 a dynAry1?

¿Cambia si tiene una matriz constante de matrices (multidimensionales)?

constArys: array [1..10] of array [1..10] of byte = . . . . . 

Respuesta

11
function CopyByteArray(const C: array of Byte): TByteDynArray; 
begin 
    SetLength(Result, Length(C)); 
    Move(C[Low(C)], Result[0], Length(C)); 
end; 

procedure TFormMain.Button1Click(Sender: TObject); 
const 
    C: array[1..10] of Byte = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
var 
    D: TByteDynArray; 
    I: Integer; 
begin 
    D := CopyByteArray(C); 
    for I := Low(D) to High(D) do 
    OutputDebugString(PChar(Format('%d: %d', [I, D[I]]))); 
end; 

procedure TFormMain.Button2Click(Sender: TObject); 
const 
    C: array[1..10, 1..10] of Byte = (
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); 

var 
    D: array of TByteDynArray; 
    I, J: Integer; 
begin 
    SetLength(D, Length(C)); 
    for I := 0 to Length(D) - 1 do 
    D[I] := CopyByteArray(C[Low(C) + I]); 

    for I := Low(D) to High(D) do 
    for J := Low(D[I]) to High(D[I]) do 
     OutputDebugString(PChar(Format('%d[%d]: %d', [I, J, D[I][J]]))); 
end; 
24

Esto copiará constAry1 a dynAry.

SetLength(dynAry, Length(constAry1)); 
Move(constAry1[Low(constAry1)], dynAry[Low(dynAry)], SizeOf(constAry1)); 
+0

Creo que ambas respuestas son correctas, así que voy a aceptar de TOndrej porque es más completa, no es que la suya es mal (por lo votaron). –

+0

¿Debería ser SizeOf() o Length (constAry)? –

+0

SizeOf está bien ... – gabr

Cuestiones relacionadas