将Vector.<SomeType>转换为Array?

Oce*_*t20 7 apache-flex arrays actionscript vector arraycollection

不幸的是,在Actionscript中,似乎对Vector类的支持尚不完全.在某些情况下,我需要将Vector转换为数组(例如,创建一个ArrayCollection).我认为这样可以解决问题:

var myVector:Vector.<MyType> = new Vector.<MyType>();

var newArray:Array = new Array(myVector);
Run Code Online (Sandbox Code Playgroud)

显然,这只是创建一个数组,其中数组的第一个索引包含完整的Vector对象.这是我唯一的选择:

var newArray:Array = new Array(myVector);

for each(var item:MyType in myVector)
{
    newArray.push(item); 
}
Run Code Online (Sandbox Code Playgroud)

我觉得这会使代码混乱很多,我需要在很多地方做到这一点.Vector类没有实现任何类型的接口,所以据我所知,我不能创建一个通用函数来转换为数组.有没有办法这样做,而不是每次我想将Vector转换为数组时都添加这个混乱?

bml*_*ite 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];
            }
        } 
    } 
}
Run Code Online (Sandbox Code Playgroud)

然后你只需要将代码更新为:

var myArray:Array = VectorUtil.toArray(myVector);
Run Code Online (Sandbox Code Playgroud)