2010-11-13 30 views
6

Comment initialiser un vecteur avec un tableau de valeurs?Comment initialiser un vecteur avec un tableau de valeurs?

J'ai essayé ceci et il se conforme bien, mais ne fonctionne pas!

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

Je dois aussi charger un tableau arbitraire dans un vecteur, comme celui-ci:

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

Est-il possible de le faire?


Edit: Comment puis-je initialiser un vecteur 2D avec un tableau 2D de valeurs?

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

J'ai essayé mais il me donne l'erreur:

TypeError: Error #1034: Type Coercion failed

+0

La variable 'langs' est fortement typé comme vecteur de type chaîne , et après avoir franchi la ligne dans FlashDevelop, les valeurs n'apparaissent pas dans la fenêtre Espion, et la longueur est 0. –

Répondre

3

Je ne pense pas que vous pouvez passer dans un tableau de tableaux dans le vecteur:

Vector.<Vector.<Number>> 

La contrainte de type ne fonctionne pas pour un type complexe. Si vous avez déjà le tableau 2D considérons le code de conversion suivant:

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

Bien sûr, cela provoquera de nouvelles copies de tout être créé deux fois, donc, idéalement, vous n'êtes pas en train de convertir de grandes listes.

4

Vous pouvez initialiser un Vector.<T> d'un tableau en utilisant le Vector.<T> global function:

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

Comment transférer un tableau de dimension 2D dans un vecteur de vecteur de nombres? –

+2

@Jenko - Je pense que la réponse de @ martineno est la plus proche. –

49

La syntaxe appropriée pour initialiser un vecteur de chaînes est la suivante:

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

Afin de créer des vecteurs multidimensionnels utilisent la syntaxe suivante:

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

Notez que les œuvres de syntaxe suivantes, mais est moins souhaitable car il génère d'abord un tableau puis le convertit en vecteur, ce qui est plus lent, a des problèmes avec de très grands tableaux et ne supporte pas les vecteurs multidimensionnels.

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

Ceci devrait être la réponse acceptée. – andrewtc

2

la plus propre, la plus rapide et la plus sûre pour les types d'initialiser un vecteur à partir d'une liste de valeurs est:

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

il ne crée pas un tableau temporaire pour initialiser le nouveau vecteur, il générera le bytecode le plus rapide, et ne dérangera pas le garbage collector avec des instanciations temporaires inutiles.Il est aussi rapide que, mais plus pratique que:

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

Plus important encore, il effectuera la vérification de type à la compilation, et de réduire le risque de se lancer des erreurs de temps

2D vecteurs, il n'y a pas directe syntaxe, de sorte que vous devrez créer explicitement chaque vecteur:

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

vous pouvez avoir des informations détaillées sur les performances de l'initialisation du vecteur non vide et pourquoi d'autres solutions sont plus lentes ici:

http://jacksondunstan.com/articles/702

PS: compilateurs plus anciens mxmlc ne comprendront pas les crochets de fermeture si elles ne sont pas séparés bv un espace:

new <Vector.<Number>>