在带矢量的Flash Player 10中,为什么还要再使用阵列?

在带矢量的Flash Player 10中,为什么还要再使用阵列?,flash,arrays,actionscript-3,types,vector,Flash,Arrays,Actionscript 3,Types,Vector,如果您的目标是Flash Player 10,是否有理由坚持将数组作为AS3中的默认列表数据结构?为什么不在整个程序中使用向量(类型化数组)作为默认值,因为它们是: 更快 类型检查 它的性能差还是会导致更高的内存开销?还有什么理由再使用数组吗?理由很多。例如,向量不是稀疏填充的,因此,如果向量的索引为999,则有1000个元素的数组。在一个标准数组中,可以只有一个。特别是当您不知道类型时,从某种意义上说,它是一个基于松散的列表。比如说,使用JSON数据 编辑:哦,这是另一个半原因-Strin

如果您的目标是Flash Player 10,是否有理由坚持将数组作为AS3中的默认列表数据结构?为什么不在整个程序中使用向量(类型化数组)作为默认值,因为它们是:

  • 更快
  • 类型检查

它的性能差还是会导致更高的内存开销?还有什么理由再使用数组吗?

理由很多。例如,向量不是稀疏填充的,因此,如果向量的索引为999,则有1000个元素的数组。在一个标准数组中,可以只有一个。

特别是当您不知道类型时,从某种意义上说,它是一个基于松散的列表。比如说,使用JSON数据

编辑:哦,这是另一个半原因-
String.split()
。这将返回一个字符串数组。不知道为什么你不能从中得到向量。,grr


话虽如此,在Flash 10+中,99%的时间您将使用向量。向量的所有“缺点”都只适用于非常特定(通常很少)的用例。

正如Robusto已经说过的,向量不是稀疏填充的。虽然这可能对尺寸不利,但对速度非常有利。所以,如果您不需要非常稀疏的填充结构(实现稀疏的东西也需要一些额外的空间),您可以利用速度


这是一个典型的交易:内存vs.速度:-)

这取决于你想做什么。尝试对向量进行排序?这需要更长的时间。你需要拼接一个数组还是向量?在这种情况下,您可能希望同时抛弃它们并使用链接列表。如果您正在寻找需要引用的带有命名键的内容,那么您可能会使用字典。这是一个模糊的、无用的回答——“视情况而定”——但确实如此。有这么多不同的数据列表结构是有原因的。

根据我对这个问题的了解,我在回答我自己的问题

矢量仅对于这些数据类型更快:-()

  • int
  • 尤因
  • 布尔值
阵列适用于所有其他类型:

  • 班级
向量仅限于使用:

  • 已检查读/写边界
    • 无法使用[5]=Val直接设置不存在的插槽
    • 无法读取不存在的插槽(否则会出现异常)
  • 必须按()键才能创建插槽
  • 排序比较慢
向量更麻烦:

  • 多维数组无法转换为向量
  • 无法将向量转换为多维数组
  • 无法使用String.split()
  • 所有元素的固定类型-对于JSON不可用
向量可以更容易调试:

  • 将[Vector of ints]设置为[Vector of Vector of ints]将引发异常
  • 编译时错误(在某些情况下)
    • 尝试将[ints向量]设置为[String向量]时
    • 尝试将[ints向量]设置为[ints向量]时

矢量可以选择固定长度,这意味着其长度不能更改。而且一次不能向数组中添加多个元素(因为答案中提到的原因)。也就是说,向量非常好,因为你提到的两个原因。你的方法是正确的,但我已经制定了向量与数组的理想用法。看我的答案,检查我的答案,伙计们!希望有帮助。谢谢你的帮助,但是我回答了我自己的问题,希望它能帮助你对这个主题有更广泛的理解。我回答了我自己的问题,希望它能帮助你对这个主题有更广泛的理解。有趣。我自己也一直在想,它们将如何取代我用作各种面向
ListBase
的控件的数据提供者的各种集合类。我看到的一个巨大的缺点是,不能像使用
数组集合
那样设置
向量的
。您甚至可以使用另一个数组中的
Array.slice()
实例化一个简单的
数组。我想,向量必须迭代增长。我现在有点想知道我将使用它们做什么。如果你不介意的话,贾维斯,我有几个问题:为什么数组更适合字符串,以及如何不能使用String.split()?