Вопрос

Я хотел бы знать порядок итераций для типов Array, Dictionary и Object в AS3 как для циклов for-each, так и for-in. Кроме того, какие факторы могут изменить порядок итераций этих комбинаций типов циклов?

Например, я предполагаю, что использование for-each для типа Array всегда перемещает от первого элемента к последнему. For-each нельзя использовать в словаре, так как порядок определяется с помощью цикла for-in?

Это было полезно?

Решение

Вы имеете в виду тип for (x in y) для каждого цикла? Спецификация AS3 гласит, что для циклов "имеют тот же синтаксис и семантику, что определены в ECMA-262, выпуск 3 и E4X".

ECMA-262, раздел 12.6.4, утверждают, что «порядок перечисления определяется объектом» - другими словами, это будет зависеть от того, перебираете ли вы список, словарь, массив и т. д.

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

РЕДАКТИРОВАТЬ: К сожалению, спецификации утверждают, что «механизм перечисления свойств [...] зависит от реализации». Я не вижу ничего в документах Array, чтобы указать порядок. Это немного неудовлетворительно, если честно: (

Другие советы

Как указано в Essential Actionscript 3.0 Колином Моком, порядок a для каждого цикла in не гарантируется, если не перечислить объект XML или XMLList;

Нажмите здесь, чтобы найти слова Колина Мука из его книги.

Есть обходные пути, о которых говорилось > здесь , но, если честно, если вам нужно гарантировать порядок, то просто используйте обычный старый цикл for и выполняйте его итерацию (length, numChildren и т. д.) несколько раз.

Порядок оценки изменился в AS3.0 Ранее, в AS 1.0 и 2.0, порядок оценки основывался на порядке добавления объектов. Теперь в 3.0 все циклы поддерживают порядок массивов. Попробуйте фрагмент:

var a:Array = new Array();
a[ 1 ] = 'first';
a[ 0 ] = 'second';

for (var key:String in a) 
    trace( key + ': ' + a[ key ] );

Попробуйте вышеописанное с AS3.0 и AS1.0 / 2.0

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top