2011-03-09 97 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