Многомерные массивы

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Элементами многомерных массивов являются другие массивы. Например, рассмотрим план на неделю, сохраненный в виде индексного массива строк:

var tasks:Array = ["wash dishes", "take out trash"];

Если нужно сохранить отдельный список дел для каждого дня недели, вы можете создать многомерный массив, где каждый день недели будет элементом. Каждый элемент содержит индексный массив, похожий на массив tasks, в котором хранится список задач. В многомерных массивах можно использовать любую комбинацию ассоциативных массивов. В примерах из следующих разделов используются два индексных массива или ассоциативный массив индексных массивов. Вы можете попробовать другие сочетания.

Два индексных массива

При использовании двух индексных массивов можно визуально представить результат как таблицу. Элементы первого массива будут строками таблицы, а элементы второго — столбцами.

Например, в следующем многомерном массиве два индексных массива используются для отслеживания списков дел для каждого дня недели. Первый массив, masterTaskList, создается с помощью конструктора класса Array. Каждый элемент массива представляет один из дней недели, где 0 — это понедельник, а 6 — воскресенье. Эти элементы будут рядами таблицы. Задача для каждого дня создается путем назначения литерала массива каждому из семи элементов, созданных в массиве masterTaskList. Литералы массива представляют столбцы таблицы.

var masterTaskList:Array = new Array(); 
masterTaskList[0] = ["wash dishes", "take out trash"]; 
masterTaskList[1] = ["wash dishes", "pay bills"]; 
masterTaskList[2] = ["wash dishes", "dentist", "wash dog"]; 
masterTaskList[3] = ["wash dishes"]; 
masterTaskList[4] = ["wash dishes", "clean house"]; 
masterTaskList[5] = ["wash dishes", "wash car", "pay rent"]; 
masterTaskList[6] = ["mow lawn", "fix chair"];

Обращаться к отдельным элементам в любых списках задач можно с помощью оператора доступа к массиву ([]). Первая пара квадратных скобок представляет день недели, а вторая — список дел для этого дня. Например, для получения второй задачи из списка дел на среду нужно сначала использовать индекс 2 для среды, а потом индекс 1 для второй задачи в списке.

trace(masterTaskList[2][1]); // output: dentist

Чтобы получить первую задачу из списка дел на воскресенье, используйте индекс 6 для вызова воскресенья, а затем индекс 0 для первой задачи.

trace(masterTaskList[6][0]); // output: mow lawn

Ассоциативный массив с индексным массивом

Чтобы упростить доступ к отдельным массивам, используйте ассоциативный массив для дней недели и индексный массив для списков задач. Использование ассоциативного массива позволяет использовать синтаксис записи через точку при обращении к определенному дню недели, но обращение к каждому элементу ассоциативного массива потребует дополнительного времени обработки. В примере ниже показано, как использовать для списка задач ассоциативный массив с парами «ключ-значение» для каждого из дней недели:

var masterTaskList:Object = new Object(); 
masterTaskList["Monday"] = ["wash dishes", "take out trash"]; 
masterTaskList["Tuesday"] = ["wash dishes", "pay bills"]; 
masterTaskList["Wednesday"] = ["wash dishes", "dentist", "wash dog"]; 
masterTaskList["Thursday"] = ["wash dishes"]; 
masterTaskList["Friday"] = ["wash dishes", "clean house"]; 
masterTaskList["Saturday"] = ["wash dishes", "wash car", "pay rent"]; 
masterTaskList["Sunday"] = ["mow lawn", "fix chair"];

Синтаксис записи через точку повышает удобочитаемость кода, избавляя его от многочисленных квадратных скобок.

trace(masterTaskList.Wednesday[1]); // output: dentist 
trace(masterTaskList.Sunday[0]);// output: mow lawn

Можно выполнять итерацию в списке задач с помощью цикла for..in, но тогда вместо синтаксиса записи через точку нужно использовать оператор доступа к массиву ([]) для получения значений, связанных с ключами. Так как masterTaskList является ассоциативным массивом, его элементы не обязательно будут вызываться по порядку, что демонстрируется в примере ниже:

for (var day:String in masterTaskList) 
{ 
    trace(day + ": " + masterTaskList[day]) 
} 
/* output: 
Sunday: mow lawn,fix chair 
Wednesday: wash dishes,dentist,wash dog 
Friday: wash dishes,clean house 
Thursday: wash dishes 
Monday: wash dishes,take out trash 
Saturday: wash dishes,wash car,pay rent 
Tuesday: wash dishes,pay bills 
*/