2010-11-13 12 views
6

Jak zainicjować wektor z tablicą wartości?Jak zainicjować wektor z tablicą wartości?

Próbowałem tego i działa dobrze, ale nie działa!

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

również trzeba załadować dowolną tablicę do wektora, tak:

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

Czy istnieje sposób, aby to zrobić?


Edit: W jaki sposób zainicjować wektor 2D 2D tablicy wartości?

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

próbowałem tego, ale to daje mi błąd:

TypeError: Error #1034: Type Coercion failed

+0

Zmienna 'langs' jest silnie wpisany jako wektor typu string , a po przekroczeniu linii w programie FlashDevelop wartości nie pojawiają się w oknie Watch, a długość wynosi 0. –

Odpowiedz

3

Nie sądzę, że możesz przekazać tablicę wektorów:

Vector.<Vector.<Number>> 

Typ przymusu nie działa w przypadku typu złożonego. Jeśli masz już Array 2D rozważyć następujący kod konwersji:

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

Oczywiście spowoduje to nowe kopie wszystkiego zostać utworzone dwa razy, tak idealnie nie jest przekształcanie dużych list.

4

można zainicjalizować Vector.<T> z tablicy przy użyciu Vector.<T> global function:

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

Jak przenieść tablicę 2D-wymiarową do wektora wektora liczb? –

+2

@Jenko - Myślę, że odpowiedź @ martineno jest najbliżej. –

49

odpowiedniej składni dla inicjalizacji Vector łańcuchów jest taka:

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

W celu stworzenia wektorów wielowymiarowe użyć następującej składni:

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

pamiętać, że poniższe prace składniowe ale jest mniej pożądane, ponieważ najpierw generuje tablicę, a następnie rzuca ją na wektor, który jest wolniejszy, ma problemy z bardzo dużymi tablicami i nie obsługuje wielowymiarowych wektorów.

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

To powinna być zaakceptowana odpowiedź. – andrewtc

2

Najczystsze i najszybszy typu bezpieczny sposób zainicjować wektora z listy wartości to:

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

nie stworzy tablicy tymczasowej w celu zainicjowania nowego Vector, dlatego wygeneruje najszybszy kod bajtowy i nie będzie kłopotał się z śmieciarzem przy użyciu niepotrzebnych tymczasowych instancji Array.Jest to jak najszybciej, ale bardziej praktyczne niż:

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

Co najważniejsze, będzie to wykonać typ sprawdzanie w czasie kompilacji i zmniejszyć szanse na błędy w czasie

2D Wektory, nie ma bezpośredniego składnia, więc musisz jawnie tworzyć każdy wektor:

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

można mieć szczegółowe informacje na temat wykonywania niepusty wektor inicjujący i dlaczego inne rozwiązania są wolniejsze tutaj:

http://jacksondunstan.com/articles/702

PS: starsze kompilatory mxmlc nie zrozumie klamry zamykające, jeżeli nie są one oddzielone spacją: bv

new <Vector.<Number>>