Форум Flasher.ru

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

Lesorub 23.04.2011 20:29

Двумерный массив
 
Заполняю простой массив элементами.
количество элементов любое, в данном случае 555:
Код AS3:

        private var myTestArray:Array = new Array();
                public function Main():void
                {       
                        fillmyArray(555);       
                }
                private function fillmyArray(a:int):void
                {
                        for (var i:int = 0; i<a; i++)
                        {
                                myTestArray[i] = 1;
                        }
                }

В AS3 нет двумерных массивов.
Выхожу из положения вложением одного массива в другой.

Код AS3:

private var myArray:Array = new Array([], [], [], [], []);
                public function Main():void
                {
                      fillArray(5, 10);               
                }
 
                private function fillArray(n:int,m:int):void
                {
                        for (var i:int = 0; i<n; i++)
                        {
                                for (var j:int = 0; j < m; j++)
                                {
                                    myArray[i][j] = 0;
                                }
                        }
                }

Большое неудобство в том, что я должен задавать определёное количество"столбцов" в квадратных скобках: new Array([], [], [], [], []);
Если я вызываю функцию fillArray(5, 10); с 4 или меньше вместо 5, проблемм нет.
Если ставлю больше 5 то получаю ошибку.
Причём вместо 10 могу поставить опять таки всё что угодно.

Как избежать такой жёсткой привязки к количеству new Array([], [], [], [], []); ???
Необходимо динамически задавать Любое количество "столбцов".
Заранее спасибо

udaaff 23.04.2011 20:31

Для оформления своего кода надо использовать соответствующие теги.

mooncar 23.04.2011 20:36

В AS2 я делаю обычно так:
Код AS1/AS2:

var myArray:Array = new Array();
 
for (i = 0; i < 200; i++)
{
  myArray[i] = new Array();
}

Наверное и здесь такой же подход можно использовать?
Соответственно потом будут существовать двести массивов второго "уровня", которые можно заполнять.
т.е. myArray[199][j] можно будет задать.

И количество и вложенность можно и более сделать, если что. "Трехмерный":
Код AS1/AS2:

var myArray:Array = new Array();
 
for (i = 0; i < 200; i++)
{
        myArray[i] = new Array();
 
        for (j = 0; j < 300; j++)
        {
                myArray[i][j] = new Array();
 
                //как-то заполняются сразу
                myArray[i][j][0] = ...
                myArray[i][j][1] =  ...
                myArray[i][j]['name'] = ...
                myArray[i][j]['lastname'] = ...
                //или потом...
        }
}

и т.д.

КорДум 23.04.2011 20:38

В AS3 нет многомерных массивов. Есть массивы массивов.
Пользуемся поиском.
http://www.flasher.ru/forum/showthre...F1%F1%E8%E2%FB

Gaen 23.04.2011 21:04

Код AS3:

private var myArray        :Array;
 
public function Main():void{
 
        this.myArray        =        this.newArray2D(5, 7);
 
}//Main
 
private function newArray2D(n:int, m:int):Array/*of Array of int*/{
 
        //Будущая матрица
        var newArray:Array/*of Array of int*/        =        [];
 
        //Добавляем строки по одной
        for(var i:int = 0; i < n; i++){
 
                //Будущая строка
                var newRow:Array/*of int*/        =        [];
 
                //Заполняем строку
                for(var j:int = 0; j < m; j++){
 
                        //Добавляем ноль в конец строки
                        newRow.push(0);
 
                }//for j
 
                //Добавляем полученную строку в матрицу
                newArray.push(newRow);
 
        }//for i
 
        return newArray;
 
}//newArray2D

Не эталон быстродействия, но зато просто и понятно.

Hauts 23.04.2011 21:32

Код AS3:

this.myArray = this.newArray2D(5, 7);

Зачем здесь "this" используется?

Gaen 23.04.2011 21:44

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

honest_man 23.04.2011 22:23

GAIKER, отличная привычка. У себя вырабатывал такую долгое время. Зато читается намного легче. =)

Hauts 24.04.2011 00:16

Хм. По-моему это не есть хорошо, писать this где не нужно по смыслу.

Bgg 24.04.2011 00:22

Так смысла то два у this: 1. улучшение читабельности кода 2. указание конкретной области видимости.

Psycho Tiger 24.04.2011 13:29

Это опять спор про this и super, ага.

Lesorub 24.04.2011 17:07

Всем большое Спасибо!

AlexFrost 01.05.2012 05:19

Цитата:

Сообщение от Hauts (Сообщение 991667)
Хм. По-моему это не есть хорошо, писать this где не нужно по смыслу.

Вообще-то, при компиляции FD сам расставит this'ы.
т.е. если был какой-нибудь
Код AS3:

public class Olol extends Sprite
private var tf:TextField = new TextField();
...
public function trolol(){
....
}
 
public function show():void{
addChild(tf);
tf.x = 100;
tf.y = 100;
}

то при компиляции он будет выглядеть вот таким образом:
Код AS3:

public class Olol extends Sprite
private var tf:TextField = new TextField();
...
public function trolol(){
....
}
 
public function show():void{
this.addChild(tf);
this.tf.x = 100;
this.tf.y = 100;
}

Ваш К.О.

ramshteks 01.05.2012 06:46

после компиляции, код будет в байт-коде. Ваш компилятор XD

AlexFrost 01.05.2012 06:49

Цитата:

Сообщение от ramshteks (Сообщение 1077792)
после компиляции, код будет в байт-коде. Ваш компилятор XD

спасибо, Капитан. Тогда после(!) декомпиляции байт-кода aka скомпилированного кода - будет именно так как я описал выше.
*не то написал (после-при) - и сразу давай тролить. красафчег, чо.

ramshteks 01.05.2012 07:04

Цитата:

Сообщение от AlexFrost (Сообщение 1077793)
спасибо, Капитан. Тогда после(!) декомпиляции байт-кода aka скомпилированного кода - будет именно так как я описал выше.
*не то написал (после-при) - и сразу давай тролить. красафчег, чо.

Да боже упаси, вас троллить.

mooncar 01.05.2012 10:43

Некропостинг, флуд и переход на личности.
AlexFrost, ramshteks, читаем правила.
Закрыто.


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

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