我想知道for-each和for-in循环中AS3中的Array,Dictionary和Object类型的迭代顺序。还有哪些因素可以改变这些循环类型组合的迭代顺序?

例如,我假设在Array类型上使用for-each总是从第一个元素移动到最后一个元素。 For-each不能在Dictionary上使用,那么如何使用for-in循环确定顺序?

有帮助吗?

解决方案

你是说for-each循环的 for(x in y)类型? AS3规范说for for loops“具有与ECMA-262 edition 3和E4X中定义的相同的语法和语义”。

ECMA-262第12.6.4节规定“对象的顺序由对象定义” - 换句话说,它取决于你是否在列表,字典,数组等中进行迭代。

我希望希望大多数集合的文档都会明确说明枚举顺序(或者订单没有定义)但是我没有检查过......

编辑:不幸的是,规范声明“枚举属性[...]的机制是依赖于实现的。”我在Array文档中看不到任何指定顺序的内容。说实话,这有点令人不满意:(

其他提示

正如Colin Moock在Essential Actionscript 3.0中所述,除非枚举XML或XMLList对象,否则无法保证每个in循环的顺序;

点击此处查看Colin Moock的书中的文字。

有讨论的解决方法这里,但老实说,如果你需要保证订单,那么只需使用常规的旧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