TList中文祥解资料,TList属性的区别? (200分)

  • 主题发起人 主题发起人 jaysuper
  • 开始时间 开始时间
J

jaysuper

Unregistered / Unconfirmed
GUEST, unregistred user!
哪位有,TList的中文祥解资料,帮助中的英文理解的不是很明确,或者有例子也可,最好加上说明,比如Capacity和Count是如何联系的,又如何时用pack,delete和remove 又有什么不同?可在线交流QQ:29599652 (加入时说明关于d7)
小弟在开发gis时碰到的问题:
运行环境:xp,d7.
函数说明:DoubleobjectCombinationOneObject 把列表中的两个object合并成一个(先删除指定的两个,把合并后的再加入到列表。用Tlist的delete删除用add加入)
ComBinArr作用为合并数组没有太大的关系吧
for i:= 0 to FLayerDataList.Count -1 do
begin
for j:=0 to FlayerDataList.RoadCount -1 do
begin
TmpRoad1 := FLayerDataList.RoadObject[j];
for k:=0 to FLayerDataList.RoadCount -1 do
begin
TmpRoad2 := FLayerDataList.RoadObject[k];
{**************在上面的这句出错,第一次删除的时候不会出错,删除后roadCount就会少一(删除了两个加入了一个)第二次的时候运行到上面这句k值会一直会检测到河roadcount的值相等,那么取tmpRoad2的值时候就会越界,不知道为什么? 是删除的方法不对?还是还需要什么操作?例如:开始 roadcount=107
  第一次删完后:roadcount =106
此时k可以取到106,从列表取值得时候就会越界}
if (j<>k) and (TmpRoad1.sName = TmpRoad2.sName)and (TmpRoad1.sName<>'') then
begin
if (TNavRoadData(FNavRoadDataList[j]).FNode=TNavRoadData(FNavRoadDataList[k]).TNode) then
begin
tmpRoad:=TRoadData.Create;
tmpRoad.Assign(TmpRoad1);
ComBinArr(TmpRoad.APointList,TmpRoad2.aPointList);
DoubleobjectCombinationOneObject(i,j,k,TmpRoad,sdtRoad);
end;
if (TNavRoadData(FNavRoadDataList[j]).TNode=TNavRoadData(FNavRoadDataList[k]).FNode) then
begin
tmpRoad:=TRoadData.Create;
tmpRoad.Assign(TmpRoad2);
CombinArr(TmpRoad.aPointList,TmpRoa[blue][/blue]d1.aPointList);
DoubleobjectCombinationOneObject(i,j,k,TmpRoad,sdtRoad);
end;
end;
end;
end;
end;
 
不太清楚你的数据的特点,因此不能提出效率很高的算法
for 循环是固定循环的,只在开始的时候检测一次Count,你的情况我建议使用while
或者你可以改变DoubleobjectCombinationOneObject,更改成把其中一个替换成新的,把另一个置nil(操作前需要检测),这时候用for应该没有问题了

TList.Capacity指的是预先分配的内存大小。只和 性能&amp;内存占用 有关系,和程序逻辑没有关系(如果你添加超过TList.Capacity,那么内部就会重新分配内存并拷贝原来的值,而如果过于频繁的改变,性能就会受到影响),设置Capacity:= Count释放浪费的空间
Capacity永远>=Count,不能设置Capacity为小于Count的值(异常)
Pack指的是删除所有nil的指针,但是它不释放空间
你现在不用去考虑Capacity/Pack,他和你现在的问题没有联系。
Remove(aPtr)等价于if IndexOf(aPtr)<>-1 then Delete(IndexOf(aPtr))
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部