如何使用值数组初始化矢量?
我试过这个并且它符合要求,但不起作用!
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:类型强制失败
答案 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>>