arrays - Delphi泛型类和动态数组

标签 arrays delphi

我已经多次阅读关于TArray<T>array of Tthis问题中的答案。据我了解,第一个的使用比后者更通用,因为对于动态数组,我应该声明一个类似...的类型。

type
   TMyFlexibleArray = array of Integer;


...这是必需的(在某些情况下),因为例如我无法返回array of Integer。当然,相反,我可以返回泛型。动态数组没有固定的长度,它们的内存是通过SetLength过程重新分配的。 TArray是带有静态方法的泛型类。关于它的文档指出:


您不应创建此类的实例,因为它仅
目的是提供排序和搜索静态方法。




它们具有两种不同的性质/功能,但是它们是否具有相同的结果(例如,当作为参数传递时或当我只需要一个灵活的容器时)?我看到TArray也有一些有用的方法。

如果我说TArray<T>是用泛型构建的动态数组,而type K = array of T是自己的动态数组(自定义数组),那是正确的吗?在我的问题中,我假设它们在作为动态数组的功能上是等效的(并且我更喜欢为舒适起见而采用的通用方法)。

最佳答案

泛型动态数组和非泛型动态数组在各个方面都相同,除了它们的泛型或其他性质外。那是唯一的区别。

这种差异会在少数可以使用一种情况而不能使用另一种情况下做出决策。例如:


由于问题中概述的原因,使用泛型类型时有时需要泛型数组。
另一方面,当编写希望在泛型过期的旧编译器上编译的代码时,则不能使用泛型数组。


如果这看起来很明显,那是因为。泛型数组和非泛型数组之间确实只有这一区别。



您还提到了TArray中的类System.Generics.Collections。这是一个静态类,包含用于搜索和排序数组的方法。它与任何动态数组类型完全不同,在这里会让人分心。尽管名称相似,但TArray<T>TArray是完全不同的东西。对于此问题,请忽略TArray

关于arrays - Delphi泛型类和动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251820/

相关文章:

delphi - 如何确定 IInterface 后代是否具有属性?

arrays - 如果第一个单元格在二维数组中相同,则无法在第二列中添加单元格

sql - Postgres 数组作为 where 子句的函数输入

javascript - 数组到对象单行

delphi - 使用delphi 2007对base64进行编码和解码base64

delphi - 减少 VCL 中花费的 CPU 时间

c - Delphi和MSVC不会以相同的方式将+ NAN与零进行比较

c++ - C++ 中内置类型的运算符重载以访问二维数组中的元素

javascript - JavaScript 数组的区别?

delphi - 拦截TAB键并抑制它