Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > ActionScript 3 > Типизировать массив |
Автор: szz 2.2.2007, 18:36 |
Мы можем давать типы переменным, но можем ли задать тип массиву? И в АС получается элементы массива - все те же динамические переменные? Например как в С int arr[100]; - это массив, все его ячейки должны быть int. А var arr:Array = new Array(); создаст массив, но ячейки динамические. Как сделать так, чтобы в элементы этого массива годились только инт? |
Автор: GZep 2.2.2007, 19:03 |
Вы имеете ввиду ключи в массиве или значения ключей? szz, опять вы про свой С |
Автор: szz 2.2.2007, 20:52 | ||
и то и другое. ключи должны быть одного типа, значения - другого. Напрмер
|
Автор: AntonioBanderaz 3.2.2007, 01:12 |
ну как вариант, расширь коллекции... сделай Generic коллекции... и generic мапы соответсвенно..... http://forum.vingrad.ru/topic-118682.html Добавлено @ 01:22 http://as3.ru/?p=8 |
Автор: szz 3.2.2007, 02:37 | ||||
Дааа, почитал... Касатекльно предпоследнего примера отсюда: http://as3.ru/?p=8\
Если вместо своего класса использовать примитивный int - например так:
То это как-то ускорит процесс или все же нет? |
Автор: AlDev 3.2.2007, 07:56 | ||
есть такая вещь - метатеги но действуют только для полей класса ![]()
но это не то. |
Автор: AntonioBanderaz 3.2.2007, 14:51 |
Мне кажется что нет... |
Автор: szz 3.2.2007, 19:04 | ||
Это именно то что надо! Спасибо огромное!!! А то, что только члены класса - не страшно, ибо в ас3 все - члены класса... Я сейчас проверю, насколько это быстрее. |
Автор: szz 3.2.2007, 19:59 | ||||
Так, результат таков. Использование [ArrayElementType("int")] дает только проверку во время компиляции и не влияет на тип данных (и, соответсвенно, никак не прибавляет скорость). Но приведение через примитивный тип переменной сработал! 30мс против 260мс! Почти в 8 раз. При 0xfffff итераций этот пример занимает 260мс:
А этот - 30мс! :
Как это объяснить? По идее массив так или иначе отстается динамически типизированным. Получается что в первом случае машина тормозит перебирая типы дл прибавления. Во втором случае мы сначало присваиваем к инту, а потом суммируем быстро два машинных значения. Значит, при присваивании к типизированной переменной n флэш не задумывается о типе? |
Автор: miramax 3.2.2007, 21:42 | ||||||
szz, статья как раз об этом. Только я для наглядности исполmзовал не примитив, а костомный класс в котором есть ещё и вложенные поля. Что бы показать, что по типизированной ссылке также ускоряется доступ к полям объекта. Вот твой код:
Обрати внимание на строку 4, там есть оператор +. Но в AS3 не только у типа int есть такое оператор. Есть ещё строки и другие числовые типа. Поэтому AVM сначала определяет тип элемента массива, а потом производит сложение. А в коде:
строками 2 и 4, ты явно определяешь тип переменной. Поэтому AVM не тратит время на поиск типа , выполняя строку 5, во много раз быстрее. Можно сказать что оператор += это то же функция в объекте типа int . И поэтому доступ к этой функции-полю через типизированную ссылку происходит намного быстрее. Аналогично в классе My из статьи, обращение к членам a, b, c происходит пыстрее через типизированную ссылку. И на последок :
![]() |