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

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

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

  1. Как создать одномерный массив
  2. Как создать многомерный (двумерный) массив
  3. Как быстрее пройти массив
  4. Как быстро очистить массив
  5. Быстрый способ добавить элемент в массив
  6. Как создать копию массива
  7. Для лучшей производительности использовать массив класса 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. Если у вас есть какие-то советы или вопросы, вы можете написать их в комментариях. А чтобы сохранить урок в закладках социальной сети нажмите на значки внизу.

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

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