2011-03-09 84 views
7

不幸的是,在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类没有实现任何类型的接口,所以据我所知我不能创建一个通用函数来转换为数组。有没有办法做到这一点,而不是每次我想将矢量转换为数组时添加这个混乱?

+0

最有可能在这里已经回答:http://stackoverflow.com/questions/1107809/as3-how-to-convert-a-vector-to-an-array – jpea 2011-03-09 16:59:56

回答

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); 
+0

谢谢,听起来这是最好的选项。我希望有一种方法可以通过'矢量。 <*>'作为方法的类型。 – Ocelot20 2011-03-09 17:36:52

+0

这让我很难过。这种语言有一个收集问题。应该有一款适用于所有产品。 – pseudopeach 2011-09-01 19:46:56

+0

有用的实用方法。 感谢您的解决方案! – 2012-12-13 08:23:15

3

Paul at Work找到a better way来做到这一点。

var newArray:Array = [].concat(myVector); 
+2

它不起作用,它在被引用的SO-Answer中指出 – 2014-07-03 22:38:43