代码之家  ›  专栏  ›  技术社区  ›  Robin Rodricks

在带矢量的Flash Player 10中,为什么还要使用数组?

  •  5
  • Robin Rodricks  · 技术社区  · 14 年前

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

    • 更快
    • 类型检查

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

    5 回复  |  直到 14 年前
        1
  •  6
  •   Robusto    14 年前

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

        2
  •  4
  •   Robin Rodricks    14 年前

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

    向量 仅对这些数据类型更快:--( proof )

    • 内景
    • 无符号整型
    • 数字
    • 布尔型

    数组 更适合所有其他类型:

    • 班级

    向量更局限于处理:

    • 检查读/写的界限
      • 不能用[5 ]=VALL直接设置不存在的时隙。
      • 无法读取不存在的时隙(或将获得异常)
    • 必须推()才能创建插槽
    • 排序比较慢

    向量更麻烦:

    • 多维数组不能转换为矢量
    • 矢量不能转换为多维数组
    • 无法使用String.split()
    • 所有元素的固定类型-对JSON不可用

    向量可以更容易调试:

    • 将[Vector of ints]设置为[Vector of ints]将引发异常
    • 编译时错误(在某些情况下)
      • 当试图将[Vector of ints]设置为[Vector of Strings]时
      • 当试图将[Vector of ints]设置为[Vector of ints]时
        3
  •  3
  •   zeh    14 年前

    也许特别是当你不知道类型的时候-在某种程度上,这是一个松散的列表。比如说,使用JSON数据。

    编辑 :哦,还有一个半原因- String.split() . 这将返回一个字符串数组。不知道为什么你不能 Vector.<String> 别这样,grr。

    也就是说,在Flash 10+中,99%的时间你将使用向量。向量的所有“缺点”只是针对非常特定(通常很少见)的用例。

        4
  •  2
  •   Mihai Nita    14 年前

    正如Robusto已经说过的那样,向量并不稀少。虽然这可能不利于尺寸,但对速度非常有利。因此,如果不需要非常稀疏的填充结构(实现这种稀疏结构也需要一些额外的空间),可以利用速度。

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

        5
  •  2
  •   n0wak    14 年前

    这取决于你想做什么。尝试排序向量?要花很长时间。你需要拼接一个数组或向量吗?在这种情况下,您可能希望同时丢弃它们并使用链接列表。如果你要找的东西有名字的键,你需要参考,那么你可能会用字典代替。这是一个含糊不清、毫无用处的答案——“这要看情况而定”——但事实确实如此。为什么有这么多不同的数据列表结构是有原因的。

    推荐文章