2010-11-13 19 views
6

Wie initialisiere ich einen Vektor mit einem Array von Werten?Wie initialisiere ich einen Vektor mit einem Array von Werten?

Ich versuchte dies und es entspricht gut, aber funktioniert nicht!

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

Ich muss auch ein beliebiges Array in einen Vektor laden, wie folgt aus:

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

Gibt es eine Möglichkeit, dies zu tun?


Edit: Wie initialisieren ich einen 2D-Vektor mit einem 2D-Array von Werten?

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

Ich habe versucht, diese aber es gibt mir den Fehler:

TypeError: Error #1034: Type Coercion failed

+0

Die Variable 'langs' wird stark typisierte als Vektor vom Typ String und nachdem ich in FlashDevelop über die Linie gegangen bin, werden die Werte nicht im Überwachungsfenster angezeigt und die Länge ist 0. –

Antwort

3

Ich glaube nicht, dass Sie können ein Array von Arrays in den Vektor eingeben:

Vector.<Vector.<Number>> 

Die Typenzerrung funktioniert nicht für einen komplexen Typ. Wenn Sie bereits das Array 2D haben den folgenden Conversion-Code betrachten:

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

Natürlich wird dies dazu führen, neue Kopien alles doppelt erstellt werden, so dass im Idealfall konvertieren Sie keine großen Listen. diese

4

Sie eine Vector.<T> aus einem Array initialisieren kann durch die Vector.<T> global function mit:

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

Wie übertrage ich ein 2D-dimensionales Array in einen Vector of Vector of Numbers? –

+2

@Jenko - Ich denke @ Martineno Antwort ist die nächste, die Sie bekommen werden. –

49

Die entsprechende Syntax für einen Vektor von Strings initialisiert ist:

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

Um mehrdimensionale Vektoren verwenden Sie die folgende Syntax zu erstellen:

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

Hinweis

, dass die folgende Syntax funktioniert, aber weniger wünschenswert, weil es zunächst ein Array generiert und es dann in einen Vector umwandelt, der langsamer ist, Probleme mit sehr großen Arrays hat und keine mehrdimensionalen Vektoren unterstützt.

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

Dies sollte die akzeptierte Antwort sein. – andrewtc

2

Die sauberste, schnellste und typsichere Art und Weise einen Vektor aus einer Liste von Werten zu initialisieren ist:

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

es wird keine temporäre Array erstellen Sie den neuen Vector zu initialisieren, so dass es erzeugt den schnellsten Bytecode und stört den Müllsammler nicht mit nutzlosen temporären Array-Instanziierungen.Es ist so schnell, wie, aber praktischer als:

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

Am wichtigsten ist, es Art Überprüfung bei der Kompilierung durchführen wird, und reduzieren die Wahrscheinlichkeit von

Für 2D-Vektoren Zeitfehler führen immer, gibt es keine direkte Syntax, so dass Ihre ausdrücklichen Vektor erstellen müssen werden:

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

Sie können in vertiefende Informationen über die Leistung von nicht-leerer Vektor Initialisierung haben und warum andere Lösungen sind hier langsamer:

http://jacksondunstan.com/articles/702

PS: ältere mxmlc Compiler wird nicht die schließenden Klammern verstehen, wenn sie bv einen Raum nicht getrennt sind:

new <Vector.<Number>>

Verwandte Themen