Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   цикл for (http://www.flasher.ru/forum/showthread.php?t=121778)

DarkLight 08.03.2009 23:37

Из хелпа
Цитата:

It iterates over the properties in reverse index order.
А порядок следования свойств в данном случае - порядок их добавления

iNils 09.03.2009 01:15

Можно и от меньшего к большему. Для этого надо сначала применить к массиву метод reverse.

Dr.OH 09.03.2009 02:44

да, но все равно это получается перебор методом "пальцем в небо", т.е. неизвестно какой элемент будет первым.

iNils 09.03.2009 03:56

Если не хотите читать то, что вам пишут, это ваши личные проблемы.

Dr.OH 09.03.2009 10:26

iNils, это вы к чему? Вы сказали, что, если применить к массиву метод reverse, то элементы в нем поменяют свою последовательность. Но при этом по прежнему неизвестно в какой последовательности они будут перечислены, т.е. reverse не дает гарантии, что при использовании for перечисление будет идти с 0 ли с конечного элемента. Более того, при применении метода reverse элементы перечисляются в произвольном поряде, т.е.
Код AS1/AS2:

var arr:Array = new Array();
arr.push(1);
arr.push(2);
arr.push(3);
arr.reverse();
for (i in arr) trace(i+": "+arr[i]);
// получаем
// 2: 1
// 0: 3
// 1: 2

...может я где-то ошибся?
Так и что я не хочу читать?

iNils 09.03.2009 12:38

Стоп. Вы меня запутали. Зачем вам вообще for in для массива?
Код AS1/AS2:

var arr:Array = new Array ();
arr.push (0);
arr.push (1);
arr.push (2);
arr.push (3);
arr.push (4);
arr.push (5);
arr.reverse ();
arr = arr.concat ();
trace (arr);
for (i in arr) {
        trace (i + ": " + arr[i]);
}


Dr.OH 09.03.2009 20:57

именно, вот мне и было интересно, можно ли сделать for in без всяких ухищрений типа concat() и почему for in так странно и непонятно работает.
Большое спасибо.

iNils 09.03.2009 21:12

Почему непонятно? DarkLight выше процитировал хелп о том, что for in работает как FILO (first in - last out). А сортировка и реверс, это ведь не единая операция, а набор действий: перебора, сравнения, удаления и добавления элементов, что опять же дает FILO.
Если внимательно посмотреть, то можно увидеть закономерность. Для четного числа берутся два центральных элемента, потом следующие от центра и тд. Для нечетного тоже самое, только центральный элемент идет последним.

Dr.OH 09.03.2009 21:55

да, я абсолютно согласен, что это все логично, но только не для массива. FILO абсолютно не предполагает таких операций, как shift и unshift. В данном случае логично предположить, что массив должен работать как очередь с нормальной вставкой элементов в начало и конец очереди. Т.е. вне зависимости от того, в начало мы добавили элемент или в конец, перечисление всегда должно идти в одном и том же направлении. что это за перечисление с конца в начало?
И не совсем понимаю, что значит "можно увидеть закономерность". если я добавил элементы в порядке 1, 2, 3, то reverse должен дать 3, 2, 1, а никак не 2, 1, 3 или что-нибудь типа такого. Вне зависимости от того, при помощи какого метода эти элементы были добавлены.
Надеюсь в AS3 это все реализовано значительно лучше.

Добавлено через 39 секунд
Прошу прощения, наверное мое последнее сообщение. это уже флуд.

iNils 10.03.2009 00:41

Цитата:

FILO абсолютно не предполагает таких операций, как shift и unshift. В данном случае логично предположить, что массив должен работать как очередь с нормальной вставкой элементов в начало и конец очереди.
for..in работает с перечисляемыми свойствами любых объектов. В том числе и для класса Array, то есть, когда вы пользуетесь for..in, элементы массива воспринимаются как свойства (см. Колина Мука в "ActionScript для Flash MX", стр. 299), а не как непосредственно сами элементы. Это ключевой момент.

Цитата:

если я добавил элементы в порядке 1, 2, 3, то reverse должен дать 3, 2, 1, а никак не 2, 1, 3 или что-нибудь типа такого.
А так и есть, reverse - это метод работающий с элементами массива, и он свою работу выполняет - меняет местами элементы относительно их индексов. А вы требуете, чтобы он работал также и со свойствами, а с какой стати?


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

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