首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TList的动态TList

TList的动态TList
EN

Stack Overflow用户
提问于 2012-02-17 00:42:54
回答 2查看 1.5K关注 0票数 1

我有这个问题:我可以将列表添加到一个列表中吗?我已经试过了,但是主列表总是返回一个列表,并且不知道我哪里错了。结构是这样的:

代码语言:javascript
复制
  PCombArray = array of Integer;
  PStatsRecord = record
    Comb: PCombArray;
    Freq: Integer;
  end;
  PStatsList = TList<PStatsRecord>;
  TStatsList = TList<PStatsList>;

其中Comb是用作主键的字段。但在这里一切都还好。我将主列表定义为:

代码语言:javascript
复制
var
  MainList: TStatsList;
  MySubList: PStatsList;

并创建它,没有问题。一个用于填充subList的过程;例如,我将此过程称为MakeSubList,并将生成的列表分配给MySubList,然后将其添加到main list:

代码语言:javascript
复制
  MainList := TList<PStatsList>.Create;
  try
    MainList.Clear;    
    for index := 1 to N do // generate N subList
    begin  
      ...
      MySubList := MakeSubList(index); // contain correct sub list, no problem here
      ...
      MainList.Add(MySubList);  // add mysublist to mainlist
    end;
    writeln (mainList.count);  // return 1, and not N-1 sublist
  finally
    MainList.Free;
  end; 

感谢帮助我理解的人,这样我才能解决它。再次感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-17 03:21:49

您的make sub list函数可能是错误的,或者您可能将自己与命名约定搞混了,而命名约定根本不遵循通常的Delphi/Pascal类型命名约定。

不过,下面的代码可以正常工作。

请注意,TList是一个对象,所以如果您想创建一个TList列表,请确保使用TObjectList而不是普通的TList,除非您喜欢内存泄漏。您的内部列表包含一个记录类型,并且不需要是TObjectList,但是如果您将StatsRecord更改为TStatsData作为TObject (类)类型,您也应该更改为TObjectList。

代码语言:javascript
复制
unit aUnit5;

interface

uses Generics.Collections;

procedure Test;

implementation

type
      CombArray = array of Integer;
      StatsRecord = record
        Comb: CombArray;
        Freq: Integer;
      end;
      TStatsList2 = TList<StatsRecord>;
      TStatsList = TObjectList<TStatsList2>;

var
      MainList: TStatsList;
      MySubList: TStatsList2;
      index:Integer;

procedure Test;
begin

      MainList := TStatsList.Create;
      try
        for index := 1 to 10 do // generate N subList
        begin
          MySubList := TStatsList2.Create;
          MainList.Add(MySubList);  // add mysublist to mainlist
        end;
        finally
        MainList.Free;
      end;
end;


end.
票数 3
EN

Stack Overflow用户

发布于 2012-02-17 00:52:51

MainList是一个PStatsList列表,因此您当然可以向其中添加PStatsList的实例。如果你不被允许,你的代码根本就不会编译或运行。

如果循环运行N次,那么MainList.Add将被称为N次,MainList.Count将被称为N。所以,如果WriteLn(MainList.Count)打印1,那么我们只能得出N = 1的结论。

TList允许重复,因此即使MakeSubList每次都返回相同的对象,它仍然可以多次添加到主列表中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9315275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档