Массивы или «разбор полетов — часть 1»


Привет! Сегодня расскажу о массивах, как и обещал в предыдущем уроке. Массив - это упорядоченный список элементов. В большинстве современных языков программирования массив может содержать элементы сразу нескольких типов и язык Actionscript не исключение. Вспомним примеры создания массивов из прошлого урока:

var digitArray = [1,2,3,4]; // можно создать массив элементов как одного типа
var mixedArray = ['some string',2, new MovieClip()]; // так и разных типов
var someArrayyet = new Array(2,34,'you can use this method'); // можно и так создавать массив

Как ясно из примера - у нас есть 2 основных способа создания массива - создание массива с помощью литералов - квадратные скобки (первый и второй способы выше), а также с помощью оператора new - создание нового экземпляра класса Array. Также внутри массива могут быть элементы любых других типов. Каждый отдельный объект массива называется элементом массива и обладает своим индексом - уникальной числовой позицией. Нумерация массива начинается с нуля. Обращение к элементу массива осуществляется так:

var digitArray = [1,2,3,4]; // создаем массив
trace(digitArray[0]); // выведет 1
trace(digitArray[2]); // выведет 3

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

var digitArray = [1,2,3,4]; // создаем массив
digitArray[4]='test'; // добавим элемент в позицию 4 
trace(digitArray[4]); // выведет test

Можно указывать произвольный индекс, например, если бы мы указали не 4, а 5 то вместо 5 элемента был бы пустой элемент, а в массив добавился бы 6 элемент. Массивы, в которых есть промежутки в виде пустых элементов называются разреженными.

Количество элементов в массиве называется его длиной. В языке Actionscript массивы - это динамические структуры, длина которых может меняться в процессе работы программы. Чтобы узнать длину массива, используется конструкция <имя массива>.length - причем длина будет на единицу больше последнего индекса:

var digitArray = [1,2,3,4]; // создаем массив
trace(digitArray.length); // выведет 4
digitArray[4]='test'; // добавим элемент в позицию 4 
trace(digitArray.length); // выведет 5

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

var digitArray = [1,2,3,4]; // создаем массив
digitArray.length = 10; // увеличим длину до 10 - добавим 6 пустых элементов
digitArray.length = 2; // сократим длину до 2

Полученных знаний вполне достаточно, чтобы полностью работать с любыми массивами, но класс Array содержит набор очень полезных функций. Функция push добавляет элемент в конец массива и имеет такой синтаксис <имя массива>.push(<элементы>), функция unshift добавляет элементы в начало массива <имя массива>.unshift(<элементы>). Прямо противоположны вышеуказанным функциям методы pop и shift - они возвращают последний элемент массива и первый соответственно, удаляя их из массива и имеют такой синтаксис <имя массива>.pop()  и <имя массива>.shift(). Примеры использования:

var digitArray = [1,2,3,4]; // создаем массив
digitArray.push(5); // добавит 5 в конец
digitArray.unshift(0); // добавит 0 в начало
trace(digitArray.pop()); // выведет 5
trace(digitArray.shift()); // выведет 0

Вышеописанные методы позволяют работать с массивом как со стеком или очередью. Также существует еще группа методов: concat - <имя массива>.concat(<список элементов или массив>), delete - delete <имя массива>[<индекс>] и splice - <имя массива>.splice(<начальный индекс>,<количество удаляемых элементов>,<элементы>). Первый метод объединяет 2 массива, либо массив и список элементов и возвращает полученный результат, второй - присваивает элементу с указанным индексом значение undefined (обратите внимание, что сам элемент при этом не удаляется из массива и его длина не меняется), третья функция - позволяет добавлять элементы в любую часть массива, к тому же позволяют удалить элементы перед вставкой новых (2 параметр 0 - не удалять элементы):

var digitArray = [1,2,3,4]; // создаем числовой массив
var stringArray = ["one","two"]; // создаем строковый массив
digitArray = digitArray.concat(stringArray); // объединим числовой и строковый массивы
digitArray = digitArray.concat("three"); // добавим в полученный массив еще строку
delete digitArray[3]; // сделаем 4 элемент undefined
digitArray.splice(1,2,"five"); // удалим 2 элемента, начиная с позиции 1 и вставим в эту позицию five
digitArray.splice(2); // удалим все элементы, начиная с позиции 2
trace(digitArray); // выведем массив

Обратите внимание на последнюю строку, здесь кроется маленькая хитрость! Дело в том что здесь неявно вызывается метод toString, который позволяет получить строковое представление объекта вызвавшего его, то есть <имя объекта>.(toString). Это значит что в данном случае запись trace(digitArray) эквивалентна записи trace(digitArray.toString()).

Actionscript позволяет также работать с многомерными массивами, хотя в чистом виде имеет поддержку только одномерных массивов. Многомерные массивы реализуются как массивы массивов, а обращение к ним осуществляется с указанием индекса родительского массива и каждого из его потомков с использование литерала [] для каждого индекса, то есть:

var digitArray = [1,2,3,4]; // создаем числовой массив
var stringArray = ["one","two"]; // создаем строковый массив
var mixArray = new Array(digitArray,stringArray); // создадим массив из двух вышеуказанных
trace(mixArray[0]); // выведет первую строку многомерного массива
trace(mixArray[1][1])// выведет 2 элемент 2 строки массива

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

Ну вот и все о массивах, хотя рассказывать о них можно очень долго :). Скажу только, что массивы это важнейшая часть практически любого языка программирования, а там где их нет используются подобные структуры. Массивы упрощают реализацию задач, экономят время, позволяют реализовать различные конструкции, приближенные к человеческому восприятию мира. До новых встреч.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *