代码之家  ›  专栏  ›  技术社区  ›  Jim McKeeth

在Delphi中将const数组复制到动态数组

  •  9
  • Jim McKeeth  · 技术社区  · 15 年前

    我有一个固定的常量数组

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

    和动态数组

    dynAry1: array of byte;
    

    复制值的最简单方法是什么 盟约1 DYNARY1 ?

    如果您有一个常量数组(多维),它会改变吗?

    constArys: array [1..10] of array [1..10] of byte = . . . . .
    
    2 回复  |  直到 9 年前
        1
  •  12
  •   Ondrej Kelle    15 年前
    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;
    
        2
  •  26
  •   Jay Elston    9 年前

    这将复制 盟约1 动态的 .

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