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

时间:2010-11-13 17:42:05

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

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

我试过这个并且它符合要求,但不起作用!

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

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

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

有办法做到这一点吗?


编辑:如何使用2D数组值初始化2D矢量?

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

我尝试了这个,但它给了我错误:

  

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

4 个答案:

答案 0 :(得分:49)

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

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 ] ];

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

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

答案 1 :(得分:4)

您可以使用Vector.<T> global function

从数组初始化Vector.<T>
var vec : Vector.<String> = Vector.<String>(["en","fr"]);

答案 2 :(得分: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);

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

答案 3 :(得分:2)

从值列表初始化Vector的最简洁,最快速且最安全的方法是:

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

它不会创建临时数组来初始化新的Vector,因此它将生成最快的字节码,并且不会使用无用的临时数组实例化来打扰垃圾收集器。它比以下更快,但更实用:

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]];

您可以深入了解非空Vector初始化的性能以及为什么其他解决方案在这里变慢:

http://jacksondunstan.com/articles/702

PS:较旧的mxmlc编译器如果没有用空格分隔,则不会理解右括号:

new <Vector.<Number>>