поиск

Создание экземпляра Vector с заранее определенным содержимым

Намусорил: Юрий «Бармалей» Яровой
В категории: Материалы

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

В ходе перевода некоторых классов разрабатываемого мною в том числе приложения на использование класса Vector, возник вопрос: «Каким образом можно наполнять экземпляр вектора нужными нам элементами при его создании?».

В случае использования массива это делается достаточно просто. Можно прибегнуть к конструктору массива:

Actionscript:
  1. var rows:Array = new Array(new Row(0, 25), new Row(183, 3));

либо же к литералу:

Actionscript:
  1. var rows:Array = [new Row(0, 25), new Row(183, 3)];

У конструктора класса Vector есть всего два строго фиксированных параметра: первый указывает длину создаваемого экземпляра, второй отвечает за то, возможно ли изменение длины вектора со временем. Поэтому передать нужные нам элементы в конструктор класса Vector у нас не получится. Литерала вектора не существует. Обратившись к документации по этому классу, максимум, что мы можем найти — это метод concat(...args):Vector.<T>, присоединяющий переданные аргументы к объекту. Т.е. следующий код:

Actionscript:
  1. var rows:Vector.<Row> = new Vector.<Row>();
  2. rows.push(new Row(0, 25));
  3. rows.push(new Row(183, 3));

может превратиться в:

Actionscript:
  1. var rows:Vector.<Row> = new Vector.<Row>().concat(new Row(0, 25), new Row(183, 3));

Однако если взглянуть на документацию более внимательно, то мы можем найти там глобальную функцию Vector, принимающую в качестве параметра исходный массив или вектор, элементы которого будут являться элементами будущего вектора, и возвращающую этот новый вектор. Синтаксис этой функции в точности повторяет синтаксис конструктора класса Vector, однако оператор new в этом случае использовать не нужно. И наш код превращается в следующий красивый и краткий кусок кода:

Actionscript:
  1. var rows:Vector.<Row> = Vector.<Row>([new Row(0, 25), new Row(183, 3)]);

Вот такие тонкости. Удачного вам программирования!

См. также:



Kомментариев - 5 к «Создание экземпляра Vector с заранее определенным содержимым»

Использование класса Vector в ActionScript 3 и Flash Player 10 — Garbage Collector [29 октября, 2008 в 14:51]

[...] «Создание экземпляра Vector с заранее определенным содерж...» [...]

Slon_vsapogah [29 октября, 2008 в 15:42]

Вот ты разошелся :) Месяц ничего не писал и вдруг каждый день по несколько постов.

Оффтоп: почему-то вспомнилась фраза "встречные социалистические обязательства" :)

Юрий Яровой [29 октября, 2008 в 15:49]

Пытаюсь быть активным — сопротивляюсь приближающейся зиме. ;-)
А если серьезно, то просто в последнее время появляется куча разных интересных событий и новшеств. Только успевай их записывать: выход десятки, бурно развивающийся четвертый флекс. Черт, столько всего еще успеть нужно...

Anton Volkov [29 октября, 2008 в 17:00]

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

Предлагаю сделать стресс-тесты на различные варианты наполнения Vector с результатами в ms.

Юрий Яровой [29 октября, 2008 в 19:19]

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

Предлагаю сделать стресс-тесты на различные варианты наполнения Vector с результатами в ms.

Сразу видно, что человек печется о каждой миллисекунде процессорного времени. :-)

Мне кажется, если нужно наполнить вектор небольшим количеством заранее известных элементов, вроде нескольких объектов строк, приведенных выше в коде, то тут будет проще воспользоваться функцией Vector. Если же количество элементов исчисляется пятью, десятью и больше, то конечно же целесообразней будет наполнить вектор при помощи цикла.

Написать комментарий:

Bы можете использовать следующие теги для форматирования: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



User's collector

Внимание!
Эта опция станет доступной только после того как вы авторизуетесь.


 запомнить меня 
Я новый пользователь

На правах рекламы