2010-11-13 10 views
6

¿Cómo inicializo un vector con una matriz de valores?¿Cómo inicializo un vector con una matriz de valores?

Probé esto y cumple muy bien, ¡pero no funciona!

langs = new Vector.<String>(["en","fr"]); 

También tengo que cargar una matriz arbitraria en un vector, como esto:

langlist = ["en","fr"]; 
langs = new Vector.<String>(langlist); 

¿Hay una manera de hacer esto?


Editar: ¿Cómo inicializar un vector 2D con una matriz 2D de los valores?

numbers = [[10,20,30], [10,20,30]]; 
nums = Vector.<Vector.<Number>>(numbers); 

He intentado esto, pero me da el error:

TypeError: Error #1034: Type Coercion failed

+0

El 'langs' la variable es de tipo fuerte como un vector de tipo string , y después de pasar la línea en FlashDevelop, los valores no aparecen en la ventana Inspección, y la longitud es 0. –

Respuesta

3

no creo que puede pasar una matriz de matrices al Vector:

Vector.<Vector.<Number>> 

La coerción de tipo no funciona para un tipo complejo. Si ya tiene la matriz 2D en cuenta lo siguiente código de conversión:

var numbers:Array = [[1, 2, 3], [4, 5, 6]]; 
var numbersTemp:Array = 
numbers.map(
    function (element:*, index:int, arr:Array):Vector.<Number> { 
    return Vector.<Number>(element); 
}); 
var nums:Vector.<Vector.<Number>> = Vector.<Vector.<Number>>(numbersTemp); 

Por supuesto, esto hará que las nuevas copias de todo lo que se creará en dos ocasiones, por lo que lo ideal es que no se está convirtiendo grandes listas.

4

Usted puede inicializar un Vector.<T> de una matriz utilizando el Vector.<T> global function:

var vec : Vector.<String> = Vector.<String>(["en","fr"]); 
+0

¿Cómo transfiero una matriz bidimensional a un Vector de Vector of Numbers? –

+2

@Jenko - Creo que la respuesta de @ martineno es lo más cercano que obtendrá. –

49

La sintaxis adecuada para inicializar un vector de cadenas es la siguiente:

var langs:Vector.<String> = new <String>[ "en","fr" ]; 

Con el fin de crear vectores multidimensionales utilizan la siguiente sintaxis:

var v:Vector.<Vector.<int>> = new <Vector.<int>>[ new <int>[ 1, 2, 3 ], new <int>[ 4, 5, 6 ] ]; 

Tenga en cuenta que los siguientes trabajos de sintaxis, pero es menos deseable porque primero genera una matriz y luego la lanza a un vector, que es más lenta, tiene problemas con matrices muy grandes y no admite vectores multidimensionales.

var langs:Vector.<String> = Vector.<String>([ "en","fr" ]); 
+2

Esta debería ser la respuesta aceptada. – andrewtc

2

el más limpio, más rápido y más forma de tipo seguro para inicializar un vector de una lista de valores es:

langs = new <String> ["en","fr"]; 

no creará una matriz temporal para inicializar el nuevo vector, por lo que generará el bytecode más rápido y no molestará al recolector de basura con instancias de Array temporales inútiles.Es lo más rápido, pero más práctico que:

langs = new Vector.<String>(2); 
langs[0] = "en"; 
langs[1] = "fr"; 

que es más importante, se llevará a cabo la comprobación de tipos en tiempo de compilación, y reducir la posibilidad de conseguir los errores de tiempo

Para 2D Vectors correr, no hay directa la sintaxis, por lo que tendrá que crear explícitamente cada vector:

nums = new <Vector.<Number> > [new <Number>[10,20,30], new <Number>[10,20,30]]; 

puede tener información en profundidad sobre el rendimiento del vector de inicialización no vacío y por qué otras soluciones son más lentas aquí:

http://jacksondunstan.com/articles/702

PS: más viejos compiladores mxmlc no entenderán los soportes de cierre si no se separan un espacio bv:

new <Vector.<Number>>

Cuestiones relacionadas