不幸的是,在Actionscript中,似乎对Vector类的支持尚不完全。在某些情况下,我需要将Vector转换为数组(例如,创建一个ArrayCollection)。我想到这会解决问题:
var myVector:Vector.<MyType> = new Vector.<MyType>();
var newArray:Array = new Array(myVector);
显然,这只是创建一个数组,其中数组的第一个索引包含完整的Vector对象。这是我唯一的选择:
var newArray:Array = new Array(myVector);
for each(var item:MyType in myVector)
{
newArray.push(item);
}
我觉得这会使代码混乱很多,我需要在很多地方做到这一点。 Vector类没有实现任何类型的接口,所以据我所知,我不能创建一个通用函数来转换为数组。有没有办法这样做,而不是每次我想将Vector转换为数组时都添加这个混乱?
答案 0 :(得分:7)
没有简单/快捷的方法,最好的解决方案是使用像这样的实用程序类:
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);
答案 1 :(得分:3)
Paul at Work找到a better way来做这件事。
var newArray:Array = [].concat(myVector);