数组 – 在Delphi中使用动态数组记录与TList的优缺点是什么?

前端之家收集整理的这篇文章主要介绍了数组 – 在Delphi中使用动态数组记录与TList的优缺点是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是一个理论问题,旨在生成Delphi中不同数据存储方式的优缺点查找列表.

假设我们有一个记录:

type
  TMyRecord = record 
    X,Y,Z: Single; 
    IsValid: Boolean; 
  end;

存储此类记录数组的基本选项是:

> TMyRecord数组;
>带有getter / setter的TList的自定义后代
> TList< TMyRecord&gt ;;
我特别感兴趣的是#1 vs#3比较,这些差异有多大,特别是在性能方面.

解决方法

&的TList LT; T>优点:

>数组没有用于添加/插入/删除/排序/搜索的有用方法,TList没有.
> TList具有Notify方法,可以覆盖该方法以对项目添加/删除执行某些自定义操作.

&的TList LT; T>缺点:

> TList< T> [i]实际上返回其元素的副本.所以你不能写像TList< TMyRec> [idx] .SomeField:= foo.相反,您必须使用临时变量.数组显然允许这样的表达.
David Heffernan提到了TList< T> .List,它消除了这个缺点;然而,它只出现在XE3中
> TList是一个对象,在不需要时应该在程序结束时删除.
> System.Generics.Collections单元可以为之前未使用System.Classes单元的项目添加大量二进制大小.

对于我自己,我写了TRecordList< T>将项目作为指针操作的类(就像经典的TList一样).

猜你在找的Delphi相关文章