您可以查看我们的TDynArray wrapper。它在一个开源单元中定义,从 Delphi 6 一直到 XE。
使用TDynArray,您可以使用类似TList 的属性和方法访问任何动态数组(如TIntegerDynArray = array of integer 或TRecordDynArray = array of TMyRecord),例如Count, Add, Insert, Delete, Clear, IndexOf, Find, Sort 和一些新方法,如 LoadFromStream, SaveToStream, LoadFrom 和 SaveTo,允许对任何动态数组进行快速二进制序列化,甚至包含字符串或记录 - CreateOrderedIndex 方法也可用于根据动态数组内容创建单独的索引。如果您愿意,还可以将数组内容序列化为 JSON。 Slice, Reverse 或 Copy 方法也可用。
它将处理记录的动态数组,甚至记录中的记录,其中包含字符串或其他动态数组。
当使用外部Count 变量时,您可以加快在引用的动态数组中添加元素的速度。
type
TPerson = packed record
sCountry: string;
sFullName: string;
sAddress: string;
sCity: string;
sEmployer: string;
end;
TPersons = array of TPerson;
var
MyPeople: TPersons;
(...)
procedure SavePeopleToStream(Stream: TMemoryStream);
var aPeople: TPerson;
aDynArray: TDynArray;
begin
aDynArray.Init(TypeInfo(TPersons),MyPeople);
aPeople.sCountry := 'France';
aPeople.sEmployer := 'Republique';
aDynArray.Add(aPeople);
aDynArray.SaveToStream(Stream);
end; // no try..finally Free needed here
还有一个TDynArrayHashed 类,它允许动态数组内容的内部散列。它非常快并且能够散列任何类型的数据(有标准的字符串散列器,但您可以提供自己的 - 甚至可以自定义散列函数)。
请注意,TDynArray 和 TDynArrayHashed 只是现有动态数组变量的包装器。因此,您可以根据需要初始化 TDynArray 包装器,以更有效地访问任何本机 Delphi 动态数组。