ActionScript 3: Хитрости работы с массивами

В этом уроке рассмотрим некоторые особенности работы с массивами в ActionScript 3. Многие приемы возможно вам будут знакомы или вы узнаете из этой статьи что-то новое.

В уроке будут затронуты следующие темы:

  1. Как создать одномерный массив
  2. Как создать многомерный (двумерный) массив
  3. Как быстрее пройти массив
  4. Как быстро очистить массив
  5. Быстрый способ добавить элемент в массив
  6. Как создать копию массива
  7. Для лучшей производительности использовать массив класса Vector

Как создать одномерный массив

Создание пустого одномерного массива:

[code language=»actionscript3″]
var test_array: Array = new Array();
[/code]

Создание одномерного массива с определенной длиной:

[code language=»actionscript3″]
var test_array: Array = new Array(3);
[/code]

Создание одномерного массива со значениями:

[code language=»actionscript3″]
var test_array: Array = new Array("red","green","orange");
[/code]

или так:

[code language=»actionscript3″]
var test_array: Array = ["red","green","orange"];
[/code]

Как создать многомерный (двумерный) массив

Создание пустого двумерного массива с заданной длиной:

[code language=»actionscript3″]
var test_array:Array = new Array();

for (var i:int = 0; i < 3; i++){
test_array[i] = new Array(3);
}
[/code]

Создание двумерного массива со значениями:

[code language=»actionscript3″]
var test_array: Array = new Array (["green","yellow","red"],
["purple","red","orange"],
["orange","blue","green"]);
[/code]

или так:

[code language=»actionscript3″]
var test_array: Array = [["green","yellow","red"],
["purple","red","orange"],
["orange","blue","green"]];
[/code]

Как быстрее пройти массив

Нужно пройти его не с начала, а с конца:

[code language=»actionscript3″]
var test_array:Array = new Array;
for (var i:int=0; i<5; i++){
test_array[i]= "test_array = "+(i+1);
}

i = test_array.length;
while(i—) {
trace(test_array[i]);
}
[/code]

Как быстро очистить массив

Назначить нулевую длину массиву

Обычно массив очищают так:

[code language=»actionscript3″]
test_array = [];
[/code]

или так:

[code language=»actionscript3″]
test_array.splice(0);
[/code]

Но быстрее будет очистить массив так:

[code language=»actionscript3″]
test_array.length = 0;
[/code]

Как ускорить очистку памяти GC при очистке массива

[code language=»actionscript3″]
while(test_array.length){
test_array.pop();
}
[/code]

Быстрый способ добавить элемент в массив

Вместо метода push() использовать в индексе длину массива:

[code language=»actionscript3″]
test_array[test_array.length] = "значение";
[/code]

Как создать копию массива

Только для одномерных массивов с целочисленными индексами

Использовать метод массива Concat():

[code language=»actionscript3″]
copied_array:Array = test_array.concat();
[/code]

Или при помощи метода slice():

[code language=»actionscript3″]
copied_array:Array = test_array.slice(0);
[/code]

Создание копии многомерного (двумерного) массива

Для создания копии многомерного массива можно использовать специальный метод ArrayUtilities.duplicate из библиотеки ascb, о котором говорится в книге «ActionScript 3.0 Cборник рецептов».

[code language=»actionscript3″]
var test_array:Array = new Array();

for (var i:int = 0; i < 3; i++){
test_array[i] = new Array();
for (var j:int = 0; j < 3; j++){
test_array[i].push(String(i)+","+String(j));
}
}

var copied_array:Array = ArrayUtilities.duplicate (test_array, true) as Array;
[/code]

Необходимую библиотеку с файлами классов, которая используется в книге «ActionScript 3.0 Cборник рецептов» , вы можете скачать здесь.

Также можно использовать функцию, которая будет копировать массив при помощи класса ByteArray:

[code language=»actionscript3″]
import flash.utils.ByteArray;

var test_array: Array = [["green","yellow","red"],
["purple","red","orange"],
["orange","blue","green"]];

var copied_array: Array = clone(test_array);

function clone(source:Object):* {
var byte_array:ByteArray = new ByteArray();
byte_array.writeObject(source);
byte_array.position = 0;
return(byte_array.readObject());
}
[/code]

Для лучшей производительности работы кода ActionScript 3 следует использовать массив класса Vector

Для ускорения работы кода и экономии памяти компьютера вместо класса Array лучше использовать класс Vector. Так как в ActionScript 3 массив класса Array является динамическим и нетипизированным, то это влияет на производительность и требует немало памяти компьютера. Иногда полезно использовать нетипизированный динамический массив типа Array, когда планируется менять типы данных в нем, а также длину. Но если этого не нужно, если заранее известно какая длина или какой тип данных будет у массива, то лучше использовать массив типа Vector.

Создадим массив типа Vector, в котором будут содержаться элементы типа String:

[code language=»actionscript3″]
var test_array: Vector.<String> = new Vector.<String>();
[/code]

Также можно указать определенную длину, например, в массиве будет пять элементов:

[code language=»actionscript3″]
var test_array: Vector.<String> = new Vector.<String>(5);
[/code]

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

[code language=»actionscript3″]
var test_array: Vector.<String> = new Vector.<String>(5, false);
[/code]

Для большего понимая работы с векторами рекомендую прочитать справочник ActionScript 3. Если у вас есть какие-то советы или вопросы, вы можете написать их в комментариях. А чтобы сохранить урок в закладках социальной сети нажмите на значки внизу.

Комментировать

Почта не публикуется.Обязательные поля отмечены *