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