Как инициализировать вектор с массивом значений?

как инициализировать вектор с массивом значений?

Я пробовал это, и он соответствует отлично, но не работает!

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

мне также нужно загрузить произвольный массив в вектор, например:

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

есть ли способ сделать это?


Edit: как инициализировать 2D-вектор с 2D-массивом значений?

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

Я пробовал это, но это дает мне ошибку:

TypeError: ошибка #1034: ошибка принуждения типа

4 ответов


Я не думаю, что вы можете передать массив массивов в вектор:

Vector.<Vector.<Number>>

принуждение типа не работает для сложного типа. Если у вас уже есть 2D-массив, рассмотрите следующий код преобразования:

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

конечно, это приведет к созданию новых копий всего дважды, поэтому в идеале вы не конвертируете большие списки.


соответствующий синтаксис для инициализации вектора строк это:

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

для создания многомерных векторов используйте следующий синтаксис:

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

обратите внимание, что следующий синтаксис работает, но менее желателен, потому что он сначала генерирует массив, а затем приводит его к вектору, который медленнее, имеет проблемы с очень большими массивами и не поддерживает многомерные векторы.

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

вы можете инициализировать Vector.<T> из массива с помощью Vector.<T> глобальная функция:

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

самый чистый, быстрый и безопасный способ инициализации вектора из списка значений :

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

он не будет создавать временный массив для инициализации нового вектора, поэтому он будет генерировать самый быстрый байт-код и не будет беспокоить сборщик мусора бесполезными экземплярами временного массива. Это так же быстро, как, но более практично, чем:

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

самое главное, он выполнит проверку типа во время компиляции и уменьшит вероятность получения ошибки времени выполнения

для 2D векторов нет прямого синтаксиса, поэтому вам придется явно создавать каждый вектор:

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

вы можете иметь подробную информацию о производительности непустой векторной инициализации и почему другие решения здесь медленнее:

http://jacksondunstan.com/articles/702

PS: более старые компиляторы mxmlc не поймут заключительные скобки, если они не разделены bv a пространство:

new <Vector.<Number>>