![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
1) Есть цикл работающий
var arr:Array = ["арбуз", "дыня", "тыква", "помидор"]; for (var i=arr.length-1; i>=0; i--) { trace(arr[i]); trace(i); } 2) Правда ли, что надо опасаться циклов for in, так как они могут давать непредсказуемые результаты после Reversa массива и др. случаях? |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
1. Вы присваиваете значение i, если поставите i=1. А нужно указывать условие выполнения цикла. Присвоение не является условием.
Зачем вам это? Чего хотите добиться? 2. Все результаты закономерны. Но могут быть непредсказуемы для вас из-за незнания/непонимания. Опасаться циклов for in не нужно. Но нужно использовать их разумно.
__________________
hauts.ru |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
1) Хотел бы добиться условия, чтобы цикл проходил с конца массива до начального элемента.
То есть, если брать пример, когда счётчик достигал бы 0 номера, то цикл останавливался. В принципе, реализовал это через >=, но не знаю насколько это корректно. |
|
|||||
|
Модрон-ветеринар
|
var arr:Array = ["арбуз", "дыня", "тыква", "помидор"]; for (var i = arr.length - 1; i >= 0; i--) { trace(arr[i]); trace(i); } А если делать условием выполнения цикла i == 0, то цикл не выполнится ни разу - потому как i в начале не будет равно 0, следовательно, итераций не будет вообще.
__________________
Идите первым! |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
Видимо, я неправильно читаю код. Волнения по поводу итераций, почему их не будет для кода ниже
Я читаю как: 1) начинать цикл с var i, которая равняется количество элементов минус 1 (так как в массиве есть 0 элемент) 2) далее закончить когда i==0 3) уменьшать на 1 еденицу значение счетчика. А Flash действительно не обрабатывает такой код, как я думаю... Добавлено через 2 минуты 4_а) Подскажите, а как организовать вывод массмва через for in, чтобы все в прямом порядке вывелось - арбуз, дыня, тыква, помидор Последний раз редактировалось dkart01; 20.06.2012 в 11:15. |
|
|||||
|
Модрон-ветеринар
|
Нет, не так. Условие проверяется при каждой итерации. Итерации продолжаются, пока оно выполняется. Как только оно перестает выполняться, итерации прекращаются. А оно при i == 0 не выполняется сразу, поэтому ничего и не происходит - цикл сразу и останавливается:
1) начинать цикл с var i, которая равняется количество элементов минус 1 (так как в массиве есть 0 элемент) 2) проверить условие, и если оно истинно, выполнить итерацию 3) уменьшать на 1 единицу значение счетчика. Насчет 4) подсказать не могу. Частенько использую for in, но не в случаях, подобным вашему*. Думается, что тут задавать порядок обхода массива лучше все же, не полагаясь на алгоритм for in, а явно задавая текущие индексы. ------------------------ *for in удобен, например, когда используется ассоциативный массив и значения и/или порядок индексов по алгоритму не определен (пример - рандомно на поле добавляются юниты в игре).
__________________
Идите первым! Последний раз редактировалось mooncar; 20.06.2012 в 12:07. |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
Теперь понял!)
Вы так здорово отвечаете на вопросы и быстро и подробно, что даже диву даешься. Что вами движет?) Вам же деньги не платят за это? |
|
|||||
|
Модрон-ветеринар
|
По секрету. Например, есть такие плюшки, что в процессе ответа могут раскрываться некоторые нюансы, доселе самому не очевидные. Залезть в доки сподвигает необходимость в 100% быть уверенным, что новичку отпишешься, не соврамши. Еще в сложных случаях - дополнительная гимнастика для ума, чтобы не высохли. ![]()
__________________
Идите первым! Последний раз редактировалось mooncar; 20.06.2012 в 19:22. |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
Один человек сказал: Хочешь быть красивым - твори добро.
Помогая, вы делаете доброе дело, а добрые дела 100% вам в жизни помогут! |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:55. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|