В этом уроке рассмотрим некоторые особенности работы с массивами в ActionScript 3. Многие приемы возможно вам будут знакомы или вы узнаете из этой статьи что-то новое.
В уроке будут затронуты следующие темы:
- Как создать одномерный массив
- Как создать многомерный (двумерный) массив
- Как быстрее пройти массив
- Как быстро очистить массив
- Быстрый способ добавить элемент в массив
- Как создать копию массива
- Для лучшей производительности использовать массив класса Vector
Как создать одномерный массив
Создание пустого одномерного массива:
var test_array: Array = new Array();
Создание одномерного массива с определенной длиной:
var test_array: Array = new Array(3);
Создание одномерного массива со значениями:
var test_array: Array = new Array("red","green","orange");
или так:
var test_array: Array = ["red","green","orange"];
Как создать многомерный (двумерный) массив
Создание пустого двумерного массива с заданной длиной:
var test_array:Array = new Array();
for (var i:int = 0; i < 3; i++){
test_array[i] = new Array(3);
}
Создание двумерного массива со значениями:
var test_array: Array = new Array (["green","yellow","red"],
["purple","red","orange"],
["orange","blue","green"]);
или так:
var test_array: Array = [["green","yellow","red"],
["purple","red","orange"],
["orange","blue","green"]];
Как быстрее пройти массив
Нужно пройти его не с начала, а с конца:
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]);
}
Как быстро очистить массив
Назначить нулевую длину массиву
Обычно массив очищают так:
test_array = [];
или так:
test_array.splice(0);
Но быстрее будет очистить массив так:
test_array.length = 0;
Как ускорить очистку памяти GC при очистке массива
while(test_array.length){
test_array.pop();
}
Быстрый способ добавить элемент в массив
Вместо метода push() использовать в индексе длину массива:
test_array[test_array.length] = "значение";
Как создать копию массива
Только для одномерных массивов с целочисленными индексами
Использовать метод массива Concat():
copied_array:Array = test_array.concat();
Или при помощи метода slice():
copied_array:Array = test_array.slice(0);
Создание копии многомерного (двумерного) массива
Для создания копии многомерного массива можно использовать специальный метод ArrayUtilities.duplicate из библиотеки ascb, о котором говорится в книге «ActionScript 3.0 Cборник рецептов».
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;
Необходимую библиотеку с файлами классов, которая используется в книге «ActionScript 3.0 Cборник рецептов» , вы можете скачать здесь.
Также можно использовать функцию, которая будет копировать массив при помощи класса ByteArray:
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());
}
Для лучшей производительности работы кода ActionScript 3 следует использовать массив класса Vector
Для ускорения работы кода и экономии памяти компьютера вместо класса Array лучше использовать класс Vector. Так как в ActionScript 3 массив класса Array является динамическим и нетипизированным, то это влияет на производительность и требует немало памяти компьютера. Иногда полезно использовать нетипизированный динамический массив типа Array, когда планируется менять типы данных в нем, а также длину. Но если этого не нужно, если заранее известно какая длина или какой тип данных будет у массива, то лучше использовать массив типа Vector.
Создадим массив типа Vector, в котором будут содержаться элементы типа String:
var test_array: Vector.<String> = new Vector.<String>();
Также можно указать определенную длину, например, в массиве будет пять элементов:
var test_array: Vector.<String> = new Vector.<String>(5);
Можно задать массиву типа Vector ограниченную длину, которую нельзя будет изменять:
var test_array: Vector.<String> = new Vector.<String>(5, false);
Для большего понимая работы с векторами рекомендую прочитать справочник ActionScript 3. Если у вас есть какие-то советы или вопросы, вы можете написать их в комментариях. А чтобы сохранить урок в закладках социальной сети нажмите на значки внизу.