转换矢量。 来阵列?
不幸的是,在ActionScript中,似乎对Vector类的支持还没有完全实现。有一些场景需要将Vector转换为数组(例如创建ArrayCollection)。我以为这会做的伎俩:转换矢量。 <SomeType>来阵列?
var myVector:Vector.<MyType> = new Vector.<MyType>();
var newArray:Array = new Array(myVector);
显然,这只是创建其中数组的第一个索引包含完整的矢量对象的数组。这是我唯一的选择:
var newArray:Array = new Array(myVector);
for each(var item:MyType in myVector)
{
newArray.push(item);
}
我觉得这样会混淆代码很多,我需要在很多地方做到这一点。 Vector类没有实现任何类型的接口,所以据我所知我不能创建一个通用函数来转换为数组。有没有办法做到这一点,而不是每次我想将矢量转换为数组时添加这个混乱?
没有简单/快速的方法来做到这一点,最好的解决办法是使用一个实用工具类,像这样的:
package {
public class VectorUtil {
public static function toArray(obj:Object):Array {
if (!obj) {
return [];
} else if (obj is Array) {
return obj as Array;
} else if (obj is Vector.<*>) {
var array:Array = new Array(obj.length);
for (var i:int = 0; i < obj.length; i++) {
array[i] = obj[i];
}
return array;
} else {
return [obj];
}
}
}
}
然后你只需要更新您的代码是这样的:
var myArray:Array = VectorUtil.toArray(myVector);
谢谢,听起来这是最好的选项。我希望有一种方法可以通过'矢量。 '作为方法的类型。 – Ocelot20 2011-03-09 17:36:52
这让我很难过。这种语言有一个收集问题。应该有一款适用于所有产品。 – pseudopeach 2011-09-01 19:46:56
有用的实用方法。 感谢您的解决方案! – 2012-12-13 08:23:15
Paul at Work找到a better way来做到这一点。
var newArray:Array = [].concat(myVector);
它不起作用,它在被引用的SO-Answer中指出 – 2014-07-03 22:38:43
最有可能在这里已经回答:http://stackoverflow.com/questions/1107809/as3-how-to-convert-a-vector-to-an-array – jpea 2011-03-09 16:59:56