我有这个问题:我可以将列表添加到一个列表中吗?我已经试过了,但是主列表总是返回一个列表,并且不知道我哪里错了。结构是这样的:
PCombArray = array of Integer;
PStatsRecord = record
Comb: PCombArray;
Freq: Integer;
end;
PStatsList = TList<PStatsRecord>;
TStatsList = TList<PStatsList>;其中Comb是用作主键的字段。但在这里一切都还好。我将主列表定义为:
var
MainList: TStatsList;
MySubList: PStatsList;并创建它,没有问题。一个用于填充subList的过程;例如,我将此过程称为MakeSubList,并将生成的列表分配给MySubList,然后将其添加到main list:
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; 感谢帮助我理解的人,这样我才能解决它。再次感谢。
发布于 2012-02-17 03:21:49
您的make sub list函数可能是错误的,或者您可能将自己与命名约定搞混了,而命名约定根本不遵循通常的Delphi/Pascal类型命名约定。
不过,下面的代码可以正常工作。
请注意,TList是一个对象,所以如果您想创建一个TList列表,请确保使用TObjectList而不是普通的TList,除非您喜欢内存泄漏。您的内部列表包含一个记录类型,并且不需要是TObjectList,但是如果您将StatsRecord更改为TStatsData作为TObject (类)类型,您也应该更改为TObjectList。
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.发布于 2012-02-17 00:52:51
MainList是一个PStatsList列表,因此您当然可以向其中添加PStatsList的实例。如果你不被允许,你的代码根本就不会编译或运行。
如果循环运行N次,那么MainList.Add将被称为N次,MainList.Count将被称为N。所以,如果WriteLn(MainList.Count)打印1,那么我们只能得出N = 1的结论。
TList允许重复,因此即使MakeSubList每次都返回相同的对象,它仍然可以多次添加到主列表中。
https://stackoverflow.com/questions/9315275
复制相似问题