Массивы или «разбор полетов — часть 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 строки массива
Обратите внимание, что массивы входящие в состав многомерного не обязательно должны быть одной длины и содержать одинаковые элементы.
Ну вот и все о массивах, хотя рассказывать о них можно очень долго :). Скажу только, что массивы это важнейшая часть практически любого языка программирования, а там где их нет используются подобные структуры. Массивы упрощают реализацию задач, экономят время, позволяют реализовать различные конструкции, приближенные к человеческому восприятию мира. До новых встреч.