加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi记录的TList

发布时间:2020-12-15 10:19:31 所属栏目:大数据 来源:网络整理
导读:我需要存储一个临时的记录列表,并认为TList将是一个很好的方法来做到这一点?但是我不确定如何做到这一点与TList,并想知道这是否是最好的,如果任何人有任何例子如何做到这一点? 解决方法 最简单的方法是创建您自己的TList的后代。以下是一个简单的示例控
我需要存储一个临时的记录列表,并认为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.

这消除了一些东西:

>它处理释放内存。
>你不必打破一切,使用它。

正如雷米和沃伦都说,这是一个更多的工作,因为你必须分配内存,当你添加新的记录。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读