gpt4 book ai didi

Delphi T 记录列表

转载 作者:行者123 更新时间:2023-12-03 14:32:59 27 4
gpt4 key购买 nike

我需要存储临时记录列表,并且认为 TList 是实现此目的的好方法?但是我不确定如何使用 TList 执行此操作,并且想知道这是否是最好的,以及是否有人有任何如何执行此操作的示例?

最佳答案

最简单的方法是创建您自己的 TList 后代。下面是一个用于演示的快速示例控制台应用程序:

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes;

type
PMyRec=^TMyRec;
TMyRec=record
Value: Integer;
AByte: Byte;
end;

TMyRecList=class(TList)
private
function Get(Index: Integer): PMyRec;
public
destructor Destroy; override;
function Add(Value: PMyRec): Integer;
property Items[Index: Integer]: PMyRec read Get; default;
end;

{ TMyRecList }

function TMyRecList.Add(Value: PMyRec): Integer;
begin
Result := inherited Add(Value);
end;

destructor TMyRecList.Destroy;
var
i: Integer;
begin
for i := 0 to Count - 1 do
FreeMem(Items[i]);
inherited;
end;

function TMyRecList.Get(Index: Integer): PMyRec;
begin
Result := PMyRec(inherited Get(Index));
end;

var
MyRecList: TMyRecList;
MyRec: PMyRec;
tmp: Integer;
begin
MyRecList := TMyRecList.Create;
for tmp := 0 to 9 do
begin
GetMem(MyRec, SizeOf(TMyRec));
MyRec.Value := tmp;
MyRec.AByte := Byte(tmp);
MyRecList.Add(MyRec);
end;

for tmp := 0 to MyRecList.Count - 1 do
Writeln('Value: ', MyRecList[tmp].Value, ' AByte: ', MyRecList[tmp].AByte);
WriteLn(' Press Enter to free the list');
ReadLn;
MyRecList.Free;
end.

这消除了一些事情:

  • 它负责释放内存。
  • 您不必输入所有内容即可使用它。

正如 Remy 和 Warren 所说,这需要更多工作,因为添加新记录时必须分配内存。

关于Delphi T 记录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797368/

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