Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Типизировать массив 
:(
    Опции темы
szz
Дата 2.2.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



Мы можем давать типы переменным, но можем ли задать тип массиву?
И в АС получается элементы массива - все те же динамические переменные?
Например как в С 
int arr[100]; 
- это массив, все его ячейки должны быть int.

А
var arr:Array = new Array();
создаст массив, но ячейки динамические.
Как сделать так, чтобы в элементы этого массива годились только инт?



--------------------
PM   Вверх
GZep
Дата 2.2.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Вы имеете ввиду ключи в массиве или значения ключей?
szz, опять вы про свой С


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
szz
Дата 2.2.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



и то и другое.
 ключи должны быть одного типа, значения - другого.
Напрмер
Код

var array:Array;
// если ключ строка, а знаечние - инт, то чтобы можно было обращаться только так:
array["some string"] = 123;
// если ключ инт, а значение - строка:
array[123] = "some string";



--------------------
PM   Вверх
AntonioBanderaz
Дата 3.2.2007, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



ну как вариант, расширь коллекции... 
сделай Generic коллекции... и generic мапы соответсвенно.....
http://forum.vingrad.ru/topic-118682.html

Добавлено @ 01:22 
http://as3.ru/?p=8


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
szz
Дата 3.2.2007, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



Дааа, почитал...
Касатекльно предпоследнего примера отсюда:
http://as3.ru/?p=8\
Код

var ar:Array = []; 
 var i:int = 0;
 var m:My = new My();
 while( i < 1000000){
     m = new My();
     m.a = Math.random()*100;
     m.b = Math.random()*100;
     m.c = Math.random()*100;
     ar.push(m);
     i+=1;
 }

// пробегае по массиву, подсчитывая то, что нужно
 var t:int = getTimer();   i = 0; var l:int = ar.length;
 while( i < l){
        m = ar[i];
    m.sum = m.a + m.b + m.c;

  Если вместо своего класса использовать примитивный int - например так:
Код

var ar:Array = []; 
 var i:int = 0;
 var m:int = 0;
 while( i < 1000000){
     m = Math.round(Math.random()*100);
     ar.push(m);
     i+=1;
 }

// пробегае по массиву, подсчитывая то, что нужно
i = 0; var l:int = ar.length;
var sum:int = 0;
 while( i < l){
        m = ar[i];
    sum += m;
}

 То это как-то ускорит процесс или все же нет?


--------------------
PM   Вверх
AlDev
Дата 3.2.2007, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



есть такая вещь - метатеги
но действуют только для полей класса smile
Код

// Define an Array of properties for a row of components.
// Restrict the type of the Array elements to mx.core.UIComponent.
[ArrayElementType("mx.core.UIComponent")]
public var bottomRow:Array;


но это не то.
PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 3.2.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Цитата(szz @  3.2.2007,  02:37 Найти цитируемый пост)
 То это как-то ускорит процесс или все же нет? 

Мне кажется что нет... 



--------------------
ГЫ... 
PM MAIL ICQ   Вверх
szz
Дата 3.2.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



Цитата

но это не то. 

  Это именно то что надо! Спасибо огромное!!!
 А то, что только члены класса - не страшно, ибо в ас3 все - члены класса...

Я сейчас проверю, насколько это быстрее.


--------------------
PM   Вверх
szz
Дата 3.2.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



Так, результат таков.
 Использование [ArrayElementType("int")] дает только проверку во время компиляции и не влияет на тип данных (и, соответсвенно, никак не прибавляет скорость).
  Но приведение через примитивный тип переменной сработал! 30мс против 260мс! Почти в 8 раз.
При 0xfffff итераций этот пример занимает 260мс:
Код

                        var sum:int = 0;
            for(i=0;i<num;++i){
                sum += arr[i];
            }

   А этот - 30мс! :
Код

                        var sum:int = 0;
                        var n:int = 0;
            for(i=0;i<num;++i){
                n = arr[i];
                sum += n;
            }


Как это объяснить? По идее массив так или иначе отстается динамически типизированным. 
Получается что в первом случае машина тормозит перебирая типы дл прибавления.
Во втором случае мы сначало присваиваем к инту, а потом суммируем быстро два машинных значения.
Значит, при присваивании к типизированной переменной n флэш не задумывается о типе?


Это сообщение отредактировал(а) szz - 3.2.2007, 19:59


--------------------
PM   Вверх
miramax
Дата 3.2.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.11.2006

Репутация: 1
Всего: 1



szz, статья как раз об этом. Только я для наглядности исполmзовал не примитив, а костомный класс в котором есть ещё и вложенные поля. Что бы показать, что по типизированной ссылке также ускоряется доступ к полям объекта.
Вот твой код:
Код

         var sum:int = 0;
         for(i=0;i<num;++i)
        {
                sum += arr[i];
        } 

Обрати внимание на строку 4, там есть оператор +. Но в AS3 не только у типа int есть такое оператор. Есть ещё строки и другие числовые типа. Поэтому AVM сначала определяет тип элемента массива, а потом производит сложение.
А в коде: 
Код

            var sum:int = 0;
            var n:int = 0;
            for(i=0;i<num;++i){
                n = arr[i];
                sum += n;
            } 

строками 2 и 4, ты явно определяешь тип переменной. Поэтому AVM не тратит время на поиск типа , выполняя строку 5, во много раз быстрее. Можно сказать что  оператор += это то же функция в объекте типа int . И поэтому доступ к этой функции-полю через типизированную ссылку происходит намного быстрее.
Аналогично в классе My из статьи, обращение к членам a, b, c происходит пыстрее через типизированную ссылку.
И на последок :
Код

            var sum:int = 0;
            var n:String = '';
            for(i=0;i<num;++i){
                n = arr[i];
                sum += n;
            } 
 
smile 


Это сообщение отредактировал(а) miramax - 3.2.2007, 21:49
PM MAIL WWW ICQ AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0968 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.