2011-03-09 26 views
7

Desafortunadamente en Actionscript, parece que el soporte para la clase Vector todavía no está completo. Hay algunos escenarios en los que necesito convertir un Vector en una matriz (creando una ArrayCollection por ejemplo). Yo pensé esto sería hacer el truco:Convertir Vector. <SomeType> a Matriz?

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

var newArray:Array = new Array(myVector); 

Aparentemente esto sólo crea una matriz en donde el primer índice de la matriz contiene el objeto del vector por completo. Es esta mi única opción:

var newArray:Array = new Array(myVector); 

for each(var item:MyType in myVector) 
{ 
    newArray.push(item); 
} 

me siento como que estorba el código mucho y me tienen que hacer esto en muchos lugares. La clase Vector no implementa ningún tipo de interfaz, por lo que puedo decir, no puedo crear una función genérica para convertirla en una matriz. ¿Hay alguna manera de hacer esto sin agregar este lío cada vez que quiero convertir un Vector a una matriz?

+0

más probable es contestado ya aquí: http://stackoverflow.com/questions/1107809/as3-how-to-convert-a-vector-to-an-array – jpea

Respuesta

7

No hay manera fácil/rápido para hacerlo, la mejor solución es utilizar una clase de utilidad como ésta:

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]; 
      } 
     } 
    } 
} 

A continuación, sólo tiene que actualizar el código a algo como esto:

var myArray:Array = VectorUtil.toArray(myVector); 
+0

Gracias, suena como que es la mejor opción. Ojalá hubiera una manera de pasar 'Vector. <*> 'como un tipo a un método. – Ocelot20

+0

Eso me hace tan triste. Este lenguaje tiene un problema de colección. Debería haber uno que funcione bien para todo. – pseudopeach

+0

Método de utilidad útil. ¡Gracias por la solución! –

3

Paul at Work encontrado a better way para hacer eso.

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

No funciona, lo cual se señala en el SO-Answer al que se hace referencia –

Cuestiones relacionadas