Форум 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)

-De- 15.11.2010 23:18

Код AS3:

var massiv:Array;//это просто указатель
trace(massiv);//он никуда не указывает, память не выделена
massiv = [];//теперь это действительно массив, указатель указывает на новый "настоящий" массив
trace(massiv);

Как-то так. Вообще я бы рекомендовал не городить такую сложную структуру как массив массивов для двумерного, если его ширина или высота заранее известна и не меняется, а сделать одномерный.
Т.е. вместо massiv[i][j] писать massiv[i + j*M_HEIGHT] и всех делов.

Psycho Tiger 15.11.2010 23:30

Цитата:

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

Хм, я всегда считал что двумерный массив - это массив масивов. А как правильно?
Цитата:

не важно. В нем все верно.
Когда в таком коде всё верно помогать Вам бессмысленно. У вас какой-то другой язык.

gloomyBrain 15.11.2010 23:39

Цитата:

А как правильно?
Правильно считать иначе =) (Ваш К.О.)

@goldlider
Цитата:

не важно. В нем все верно.
В любом коде все верно. Правда, не любой делает то, что Вы хотите (как, на пример, в Вашем случае)

КорДум 15.11.2010 23:41

Psycho Tiger, я всегда считал, что это таблица, без вложенностей.

medvedya2 15.11.2010 23:48

n мерный массив это последовательность элементов, где к каждый элементу осуществляется доступ через n-мерный индекс [][][].., в памяти массив всегда одномерный.
в as3 к сожалению не так.

f.g.programmer 16.11.2010 00:02

Цитата:

n мерный массив это последовательность элементов, где к каждый элементу осуществляется доступ через n-мерный индекс [][][].., в памяти массив всегда одномерный.
в as3 к сожалению не так.
Это в том случае, если массив типизирован и имеет фиксированную размерность. Никаких сожалений, а as3 просто универсальная реализация.

-De- 16.11.2010 00:07

Одно измерение может не иметь фиксированный размер (см. выше как оно переиндексируется). Ну и в случае, когда хранятся указатели, можно договориться с типизацией.

goldlider 16.11.2010 00:08

Цитата:

Сообщение от -De- (Сообщение 950007)
Код AS3:

var massiv:Array;//это просто указатель
trace(massiv);//он никуда не указывает, память не выделена
massiv = [];//теперь это действительно массив, указатель указывает на новый "настоящий" массив
trace(massiv);

Как-то так. Вообще я бы рекомендовал не городить такую сложную структуру как массив массивов для двумерного, если его ширина или высота заранее известна и не меняется, а сделать одномерный.
Т.е. вместо massiv[i][j] писать massiv[i + j*M_HEIGHT] и всех делов.

В цикле в двумерном массиве внутреннему массиву заново будет выделяться память при очередном увеличении индекса внешнего массива ?

-De- 16.11.2010 00:21

"[]" - то же самое, что и "new Array()". _Заново_ выделять не надо. Но выделять надо.
Если мы хотим использовать массив, то мы его должны создать (выделить память). Если этот массив - элемент другого массива, то всё равно должны.

goldlider 16.11.2010 00:32

De, что за белиберда получается. Как понять ваши слова "Заново выделять не надо. Но выделять надо."
В данном примере

Код AS3:

var i:uint;
var j:uint;
var arr:Array = []; // Здесь память выделяется один раз
for (i = 0; i < 1000; i++) {
        arr[i] = []; // Память выделяется при очередном увеличении i
        for (j = 0; j < 1000; j++) {
                arr[i][j] = String(i) + "_" + String(j);
        }
}



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

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