是的, 例如: var A, B: array of TMyRecord; 如何在A的后面添加B? 另外如何删除A中的某元素?
procedure TForm1.Button1Click(Sender: TObject); type TMyRecord = record C: Integer; D: Integer; end; var A,B: array of TMyRecord; P: ^TMyRecord; begin SetLength(A,4); SetLength(B,2); A[0].C := 1; A[0].D := 2; A[1].C := 3; A[1].D := 4; B[0].C := 5; B[0].D := 6; B[1].C := 7; B[1].D := 8; P := @A[2]; CopyMemory(P,@B[0],SizeOf(TMyRecord)*2); ShowMessage(IntToStr(A[0].C)); end;
procedure AppendBuffer(Source : TByteDynArray;var Dest : TByteDynArray); begin SetLength(Dest,Length(Source)+Length(Dest)); Move(Source[0],Dest[Length(Dest)-Length(Source)],Length(Source)); end;
一种办法是做类型转换,然后用上面的函数一种办法是把上面的函数改造一下:type TMyRecord = record end; TMyRecordArray = array of TMyRecord;procedure AppendBuffer(Source : TMyRecordArray;var Dest : TMyRecordArray); begin SetLength(Dest,Length(Source)*SizeOf(TMyRecord)+Length(Dest)*SizeOf(TMyRecord)); Move(Source[0],Dest[Length(Dest)-Length(Source)],Length(Source)*SizeOf(TMyRecord)); end;
例如:
var
A, B: array of TMyRecord; 如何在A的后面添加B?
另外如何删除A中的某元素?
type
TMyRecord = record
C: Integer;
D: Integer;
end;
var
A,B: array of TMyRecord;
P: ^TMyRecord;
begin
SetLength(A,4);
SetLength(B,2);
A[0].C := 1;
A[0].D := 2;
A[1].C := 3;
A[1].D := 4;
B[0].C := 5;
B[0].D := 6;
B[1].C := 7;
B[1].D := 8;
P := @A[2];
CopyMemory(P,@B[0],SizeOf(TMyRecord)*2);
ShowMessage(IntToStr(A[0].C));
end;
begin
SetLength(Dest,Length(Source)+Length(Dest));
Move(Source[0],Dest[Length(Dest)-Length(Source)],Length(Source));
end;
TMyRecord = record
end; TMyRecordArray = array of TMyRecord;procedure AppendBuffer(Source : TMyRecordArray;var Dest : TMyRecordArray);
begin
SetLength(Dest,Length(Source)*SizeOf(TMyRecord)+Length(Dest)*SizeOf(TMyRecord));
Move(Source[0],Dest[Length(Dest)-Length(Source)],Length(Source)*SizeOf(TMyRecord));
end;
一个做法是复制指定位置前的元素和指定位置后的元素,
然后合并两个新的为一个数组另一个做法是指定位置的数据和后面的元素进行值交换,
然后用SetLength重新指定长度