Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.06.2013, 17:01
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 1  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
По умолчанию Особенности итерации for(in) для Array в AS3

Раз уж добрался до форума, вот еще вопрос прошаренным товарищам
Не так давно наткнулся на вопрос на stackoverflow начет сравнения скорости выполнения обычного
Код AS3:
for (var i:uint = 0; i < n; i++)
и for in
Код AS3:
for (var i:String in something)
Прямую ссылку, к сожалению, потерял, но суть была такая:
Весь трюк итерации по Array с помощью for in заключался в создании объекта i типа String и использовании i в качестве индекса:
Код AS3:
var items:Array = ["hi", "there", "bob"];
for (var index:String in items) {
	trace(index+" => "+items[index]); // traces "0 => hi", "1 => there" and "2 => bob"
}
Ответ приняли как верный и сказали, что да, этот способ быстрее чем если делать интовый i

Собственно, сам вопрос. Почему для доступа к элементам массива по индексу используется величина типа String (нельзя определить i как число), что в данном случае передается в i?
Я просто привык к синтаксису java, где в цикле мы прямо указывали класс и обращались с переменной как с объектом класса.

В документации написано, что можно использовать этот метод для итерации через свойства объекта или элементы класса
Цитата:
The for..in loop iterates through the properties of an object, or the elements of an array. For example, you can use a for..in loop to iterate through the properties of a generic object (object properties are not kept in any particular order, so properties may appear in a seemingly random order):

Старый 04.06.2013, 17:05
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 2  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Я бы не рекомендовал вам использовать for in для обхода элементов массива по индексу, используйте этот цикл по месту для Object и Dictionary, и про скорость, я думаю, вы что-то напутали.

Код AS3:
const textField:TextField = new TextField()
textField.width = 100;
textField.height = 100;
textField.border = true;
 
const a:Array = [];
for(var i:int = 0; i < 1000000; i++) {
	a[i] = i;
}
 
var startTime:int = getTimer();
for(var name:String in a) {
	a[name];
}
//trace(getTimer() - startTime);//2969
textField.appendText((getTimer() - startTime).toString());//2750
textField.appendText("\n");
 
startTime = getTimer();
for(var j:int = 0; j < 1000000; j++) {
	a[j];
}
//trace(getTimer() - startTime);//66
textField.appendText((getTimer() - startTime).toString());//5
addChild(textField);
__________________
местонахождение

Старый 04.06.2013, 17:11
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 3  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Вот и мне этот ответ показался странным, но там его приняли как идеальный и верный. если найду, скину ссылку

Старый 04.06.2013, 19:46
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 4  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
Почему для доступа к элементам массива по индексу используется величина типа String (нельзя определить i как число)
Потому что "Array extends Object" и индекс - это просто ключ (key) к объекту.

Код AS3:
var obj:Object = {};
obj['0'] = 'hi';
 
var obj:Object = {};
obj[1] = 'hello';
 
var arr:Array = [];
arr['0'] = 'hi';
 
var arr:Array = [];
arr[1] = 'hello';
Эти записи идентичны.

Старый 04.06.2013, 21:40
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Я просто привык к синтаксису java, где в цикле мы прямо указывали класс и обращались с переменной как с объектом класса.
В джаве нет такого цикла (как for in в as3). Там
Код:
for(SomeType someObj : someObjects) {}
аналог for each in из ас3.
Поэтому в ас3 тоже можно сделать примерно как в джаве
Код AS3:
for each (var someObj:SomeType in someObjects) {
   // что-то 
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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