gpt4 book ai didi

delphi - 从 block 中的列表复制动态数组

转载 作者:行者123 更新时间:2023-12-03 15:50:46 26 4
gpt4 key购买 nike

在帖子中:Copy sublist from list留下来向我解释说,要复制列表中的子列表,需要复制单个元素,这样做:

for iIndex2 := 0 to MyList.Last.Count-1 do 
MySubList.Add(MyList.Last[iIndex2]);

我已经证实,这种复制列表中最高位置的元素的方法需要花费很多时间,对于某些矿井也是如此。尝试在相同条件下使用静态数组进行模拟,我需要几毫秒,一次性复制数组中的所有子列表,而不是单个元素。为了更好地解释,我有:

program Test_with_array_static;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils, System.Generics.Collections;

type
TMyArray = array [1..10] of Integer;
TMyList = TList<TMyArray>;

var
MyArray: TMyArray;
MyList: TMyList;
iIndex1, iIndex2: Integer;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }

MyList := TList<TMyArray>.Create;
try
for iIndex1 := 1 to 10 do
begin
if MyList.Count <> 0 then MyArray := MyList.Last;
MyArray[iIndex1] := iIndex1;
MyList.Add(MyArray);
end;

for iIndex1 := 0 to Pred(MyList.Count) do
begin
for iIndex2 := 1 to 10 do Write(MyList[iIndex1][iIndex2]:3);
Writeln;
end;
finally
MyList.Free;
end;

except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.

所以我想不使用列表作为子列表,而是使用数组,这样就可以工作,但就我而言,我一般不知道数组中有多少元素并且需要动态数组。我已经更改了代码:

program Test_with_array_dynamic;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils, System.Generics.Collections;

type
TMyArray = array of Integer;
TMyList = TList<TMyArray>;

var
MyArray: TMyArray;
MyList: TMyList;
iIndex1, iIndex2: Integer;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }

MyList := TList<TMyArray>.Create;
try
SetLength(MyArray, 10);
for iIndex1 := 1 to 10 do
begin
if MyList.Count <> 0 then MyArray := MyList.Last;
MyArray[iIndex1] := iIndex1;
MyList.Add(MyArray);
end;

for iIndex1 := 0 to Pred(MyList.Count) do
begin
for iIndex2 := 1 to 10 do Write(MyList[iIndex1][iIndex2]:3);
Writeln;
end;
finally
MyList.Free;
end;

except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.

所以,我又遇到了之前的问题;当然,改变这一行:

if MyList.Count <> 0 then MyArray := MyList.Last;

在复制单个元素的模式下,一切正常。现在我问,如果真的不可能一次复制一个数组,而不复制单个元素,我只需要它来解决速度问题。时间非常重要。再次非常感谢所有可以解决我这个问题的人。再次感谢。

最佳答案

您需要添加数组的副本。否则,由于您不断将数组变量的长度设置为相同的值,因此您最终会处理同一个动态数组。要复制数组,只需调用 Copy在将其添加到您的列表之前:

MyList.Add(Copy(MyArray));

关于delphi - 从 block 中的列表复制动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com