Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Многомерные массивы в AS 3.0 (http://www.flasher.ru/forum/showthread.php?t=146147)

van2tus 29.10.2010 21:50

Многомерные массивы в AS 3.0
 
Здравствуйте, я совсем недавно начал изучать Action Script 3.0 и у меня появился такой вопрос как создать двумерный массив?

В руководстве от Adobe был такой пример:

Код AS3:

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"];

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

Заранее спасибо за ответ.

P.S. Извиняюсь, если дублирую тему... искал не нашел...

КорДум 29.10.2010 21:54

Код AS3:

var i:uint;
var j:uint;
var arr:Array = [];
for (i = 0; i < 1000; i++) {
        arr[i] = [];
        for (j = 0; j < 1000; j++) {
                arr[i][j] = String(i) + "_" + String(j);
        }
}


van2tus 29.10.2010 21:59

Спасибо )

goldlider 15.11.2010 21:17

Дан такой код:

Код AS3:

const M_HEIGHT = 15; // Строка
const M_WIDTH = 20; // Столбец
 
function ABC():void
{
        massiv:Array = [];
        massiv.length = M_HEIGHT;
 
        for (var ay:int = 0; ay < M_HEIGHT, ay++)
        {
                massiv = [];
                massiv[ay].length = M_WIDTH;
 
                for (var ax:int = 0; ax < M_WIDTH, ax++)
                {
                        massiv[ay][ax] = CELL_FREE // Какое-нибудь значение
                }
        }
}

Теперь вопросы:

1. Почему при инициализации нужно присвоить хотя бы какое-то значение ? В данном примере massiv:Array = []; Нельзя ли написать просто massiv:Array. Ведь в данном коде далее идет присвоение массиву значения massiv[ay][ax] = CELL_FREE.

2. Почему при задании длины массиву обращаться приходиться так massiv.length = M_HEIGHT;, а не так massiv[ay].length = M_HEIGHT;,

а вместо massiv[ay].length = M_WIDTH; вот так massiv[ax].length = M_WIDTH;

КорДум 15.11.2010 22:35

Цитата:

1. Почему при инициализации нужно присвоить хотя бы какое-то значение ?
Потому что massiv:Array лишь типизирует переменную, но никак не говорит ей, что она новый массив.
Цитата:

2. Почему при задании длины массиву обращаться приходиться так massiv.length = M_HEIGHT;, а не так massiv[ay].length = M_HEIGHT;
В смысле? massiv - Это внешний массив, а massiv[ay] - внутренний, что непонятного?
Кроме того, massiv[ay] - это элемент массива massiv, а massiv[ay][ax] - элемент массива massiv[ay].

udaaff 15.11.2010 22:43

goldlider, где вы этот код выкопали?

Код:

const M_HEIGHT = 15; // Строка
const M_WIDTH = 20; // Столбец
 
function ABC():void
{
        var massiv:Array = [];
        massiv.length = M_HEIGHT;
 
        for (var ay:int = 0; ay < M_HEIGHT; ay++)
        {
                massiv = [];
                massiv[ay].length = M_WIDTH;
                massiv[ay] = [];

                for (var ax:int = 0; ax < M_WIDTH; ax++)
                {
                        massiv[ay][ax] = CELL_FREE // Какое-нибудь значение
                }
        }
}


goldlider 15.11.2010 22:55

КорДум, Поправь меня если я не прав. Т.е. получается, что для задания длины одномерного массива мы используем запись massiv.length = 50; не используя никакие квадратные скобки.
А при вызове массива в цикле используется запись massiv[i]
Для двумерного массива мы используем запись massiv[j].length = 50; При вызове массива в цикле используется запись massiv[i,j]
Для трехмерного массива massiv[j,k] = 50; При вызове массива в цикле используется запись massiv[i,j,k]
Т.е. в квадратных скобках при задании длины пишется на одну переменную меньше.

Добавлено через 4 минуты
Цитата:

Сообщение от udaaff (Сообщение 949997)
goldlider, где вы этот код выкопали?

Код:

const M_HEIGHT = 15; // Строка
const M_WIDTH = 20; // Столбец
 
function ABC():void
{
        var massiv:Array = [];
        massiv.length = M_HEIGHT;
 
        for (var ay:int = 0; ay < M_HEIGHT; ay++)
        {
                massiv = [];
                massiv[ay].length = M_WIDTH;
                massiv[ay] = [];

                for (var ax:int = 0; ax < M_WIDTH; ax++)
                {
                        massiv[ay][ax] = CELL_FREE // Какое-нибудь значение
                }
        }
}


не важно. В нем все верно. Просто вопрос возник насчет массива. Это всего лишь часть кода.

КорДум 15.11.2010 23:03

Да, так.
Цитата:

При вызове massiv[i,j,k]
Только пишите правильно - massiv[i][j][k]
Цитата:

Т.е. в квадратных скобках при указании длины пишется на одну переменную меньше.
Нужно понимать, что такое массив и элемент массива, являющийся массивом.

goldlider 15.11.2010 23:09

Цитата:

Сообщение от КорДум (Сообщение 950003)
Да, так.

Только пишите правильно - massiv[i][j][k]

Нужно понимать, что такое массив и элемент массива, являющийся массивом.

Объясните на пальцах, что такое элемент массива, являющийся массивом ? Или же в какой книге это можно найти. В книге Мука подобное не нашел.

КорДум 15.11.2010 23:16

В ас3 нет многомерных массивов. Их можно сымитировать. В книге Мука как раз это и есть. 244 страница даже.
[ [], [], [], ..., [] ] - вот так имитируется двумерный массив. Его элементы - тоже массивы. Понятно теперь стало?


Часовой пояс GMT +4, время: 19:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.