gpt4 book ai didi

delphi - 在 Delphi 中从 TList 开头删除大块项目的有效方法是什么

转载 作者:行者123 更新时间:2023-12-03 14:43:05 25 4
gpt4 key购买 nike

从 TList 中删除 (0) 的成本很高,因为所有后续项都需要向下移动。如果我需要从更大列表的开头删除大量项目,最快的方法是什么?

最佳答案

TList 的开头删除大量元素价格昂贵。虽然类名奉承欺骗,一个TList实际上是一个数组。在 TList没有删除范围的工具 - 每个项目必须单独删除,然后列表的其余部分向下移动。对于较大的范围,这将引发大量的重新分配和完整的列表移动。

如果您有更现代的 Delphi,您可以使用通用列表类 TList<T> 并利用 DeleteRange 方法。该文档包含以下重要说明:

This is an O(ACount) operation.

在 Delphi 2006 中,您可以编写具有同等性能特征的代码,如下所示:

procedure DeleteRange(List: TList; AIndex, ACount: Integer);
var
i: Integer;
NewCount: Integer;
begin
NewCount := List.Count-ACount;
Assert(AIndex>=0);
Assert(ACount>=0);
Assert(NewCount>=0);
for i := AIndex to NewCount-1 do
List[i] := List[i+ACount]
List.Count := NewCount;
end;

关于delphi - 在 Delphi 中从 TList 开头删除大块项目的有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8349044/

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