Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание n переменных (http://www.flasher.ru/forum/showthread.php?t=134368)

nickorsk 28.12.2009 14:19

Создание n переменных
 
Допустим нужно создать n переменных, т.е. в ручном режиме мы не можем их создавать.
В actionscript2 это бы выглядело примерно так:
Код AS1/AS2:

var n:int=10;
for(var i:int=0;i<=n;i++){
var get("per"+String(i)):int;
}

Т.е. создаются переменные per1,per2...pern - в данном случаи 10 штук.
Как создавать n переменных в actionscript3???

random13 28.12.2009 14:28

а смысл то какой? массив вам уже не подходит?

nickorsk 28.12.2009 14:43

Цитата:

Сообщение от random13 (Сообщение 875773)
а смысл то какой? массив вам уже не подходит?

допустим мы используем массив, как имя переменной то формировать???
mas[x1,x2...xn] - то имя переменной формировалось раньше
Код AS3:

get("x"+String(i););

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

alexcon314 28.12.2009 14:59

Создание массива:
Код:

var arr:Array = new Array();
Заметьте, массив уже создали, никаких for не нужно.
Заполнение массива:
Код:

for(var i:int=0; i<10; i++){
  arr[i] = /* тут значение, которе нужно сохранить ...*/
}

либо вручную:
Код:

arr[0] = 1;
arr[1] = 18;
...

Обращение к элементу массива:
Код:

var myVariable:int = arr[1]+arr[0];
Имя переменной в случае с использованием массива - это имя массива с номером элемента в квадратных скобках: arr[i].
В чем преимущества вашего подхода не ясно.

random13 28.12.2009 15:00

походу вы что то не понимаете...

Цитата:

допустим мы используем массив, как имя переменной то формировать???
mas[x1,x2...xn] - то имя переменной формировалось раньше
в чем проблема использовать ассоциативные массивы?
Код AS3:

var n:int=10;
var myArr:Array = new Array;
for(var i:int=0;i<=n;i++){
  myArr['per' + i] = '';
}


Код AS3:

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

хмм извините вы сам тоже использовали зачем то при создании ваших переменных цикл...

смысл короче не раскрыли

nickorsk 28.12.2009 15:41

Спасибо за ответы :)

Добавлено через 3 часа 12 минут
В общем мне нужно создать двумерный массив типа Mas[n][n].
Собственно никак получить его используя только массивы не получается.
Если бы массив был 5*5, то мы его создали вручную, так:
Код AS3:

private  static var masx1:Array = ["00","01","02","03","04"];
private  static var masx2:Array = ["10","11","12","13","14"];
private  static var masx3:Array = ["20","21","22","23","24"];
private  static var masx4:Array = ["30","31","32","33","34"];
private  static var masx5:Array = ["40","41","42","43","44"];
private  static var masy:Array=[masx1,masx2,masx3,masx4,masx5];

Но если у нас массив типа n*n, нам надо создавать переменные masx1,masx2...masxn. Именно поэтому я и спрашиваю как создавать n переменных. С массивами никак не получается.

Gaen 28.12.2009 19:20

Код AS3:

var n:int = 10;
 
var matrix:Array = [];
 
for(var i:int = 0; i < n; i++){
 
    var row:Array = [];
 
    for(var j:int = 0; j < n; j++){
 
        row.push(String(i) + String(j));
 
    }//for
 
    matrix.push(row);
 
}//for


leofit 29.12.2009 09:23

Цитата:

Сообщение от nickorsk (Сообщение 875785)
В общем мне нужно создать двумерный массив типа Mas[n][n].

Object Вам в помощь

Код AS3:

var n = 10;
 
//создается глобальный массив
var obj:Object = new Object();
 
 for(var j:int = 0; j < n; j++){
        //В цикле в массив дополняются подмассивы
        var subObj:Object = new Object();
        //у каждого может быть куча разных свойств, в т.ч. и вложенных массивов
        subObj.firstVal = 'FirstValBy'+j;
        subObj.secondVal = 'SecondValBy'+j;
        obj[j] = subObj;
}
 
 
 
for(var k in obj) {
        trace('Arr #' + k);
        trace(obj[k].firstVal);
        trace(obj[k].secondVal);
        trace();
 
/*
Arr #0
FirstValBy0
SecondValBy0
 
Arr #1
FirstValBy1
SecondValBy1
...
*/

}
 
trace('__Arr #9 SecondVal = ' + obj[9].secondVal);
//__Arr #9 SecondVal = SecondValBy9

В общем то ничего нового

Gaen 29.12.2009 17:22

leofit, не путайте Object с массивом. Ваш код создаёт, так сказать, структуру размером Nx2 а не NxN.

RandomUser 29.12.2009 19:53

Если, все таки нужно создание переменных, то классы могут быть динамическими:
Код AS3:

package  
{
        import flash.display.MovieClip;
 
        dynamic public class Test extends MovieClip
        {
                public function Test()
                {
                        for (var i: int = 0; i < 10; i++)
                        {
                                this["dynamicVar" + i] = i;
                        }
 
                        for (var prop: String in this)
                        {
                                trace(prop + " = " + this[prop]);
                        }
                }
        }
}



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

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