【问题标题】:How do I initialize a vector with an array of values?如何用一组值初始化向量?
【发布时间】:2010-11-13 17:42:05
【问题描述】:

如何使用值数组初始化向量?

我试过了,它符合要求,但不起作用!

 langs = new Vector.<String>(["en","fr"]);

我还需要将任意数组加载到向量中,如下所示:

 langlist = ["en","fr"];
 langs = new Vector.<String>(langlist);

有没有办法做到这一点?


编辑:如何用二维值数组初始化二维向量?

 numbers = [[10,20,30], [10,20,30]];
 nums = Vector.<Vector.<Number>>(numbers);

我试过了,但它给了我错误:

TypeError:错误 #1034:类型强制失败

【问题讨论】:

  • 变量langs被强类型化为字符串类型的向量,在我在FlashDevelop中跨过该行后,值不会显示在Watch窗口中,长度为0.

标签: flash arrays actionscript-3 vector strong-typing


【解决方案1】:

初始化字符串向量的适当语法如下:

var langs:Vector.<String> = new <String>[ "en","fr" ];

为了创建多维向量,请使用以下语法:

var v:Vector.<Vector.<int>> = new <Vector.<int>>[ new <int>[ 1, 2, 3 ], new <int>[ 4, 5, 6 ] ];

请注意,以下语法有效,但不太理想,因为它首先生成一个数组,然后将其转换为一个向量,这比较慢,存在非常大的数组的问题,并且不支持多维向量。

var langs:Vector.<String> = Vector.<String>( [ "en","fr" ] );

【讨论】:

    【解决方案2】:

    您可以使用Vector.&lt;T&gt; global function 从数组中初始化Vector.&lt;T&gt;

    var vec : Vector.<String> = Vector.<String>(["en","fr"]);
    

    【讨论】:

    • 如何将二维数组转换为数字向量的向量?
    • @Jenko - 我认为@martineno 的答案是你能得到的最接近的答案。
    【解决方案3】:

    我不认为你可以将数组数组传入 Vector:

    Vector.<Vector.<Number>>
    

    类型强制不适用于复杂类型。如果您已经拥有 2D 数组,请考虑以下转换代码:

    var numbers:Array = [[1, 2, 3], [4, 5, 6]];
    var numbersTemp:Array =
    numbers.map(
        function (element:*, index:int, arr:Array):Vector.<Number> {
        return Vector.<Number>(element);
    });
    var nums:Vector.<Vector.<Number>> = Vector.<Vector.<Number>>(numbersTemp);
    

    当然,这会导致所有内容的新副本被创建两次,因此理想情况下您不会转换大列表。

    【讨论】:

      【解决方案4】:

      从值列表初始化向量的最简洁、最快和最类型安全的方法是:

      langs = new <String> ["en","fr"];
      

      它不会创建一个临时数组来初始化新的向量,所以它会生成最快的字节码,并且不会用无用的临时数组实例来打扰垃圾收集器。它和 :

      一样快,但更实用
      langs = new Vector.<String>(2);
      langs[0] = "en";
      langs[1] = "fr";
      

      最重要的是,它会在编译时进行类型检查,减​​少出现运行时错误的机会

      对于 2D 向量,没有直接的语法,因此您必须显式创建每个向量:

      nums = new <Vector.<Number> > [new <Number>[10,20,30], new <Number>[10,20,30]];
      

      您可以在此处获得有关非空向量初始化性能以及其他解决方案速度较慢的原因的深入信息:

      http://jacksondunstan.com/articles/702

      PS:如果没有用空格分隔,旧的 mxmlc 编译器将无法理解右括号:

      new &lt;Vector.&lt;Number&gt;&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-31
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多