13

我想知道 AS3 中数组、字典和对象类型的迭代顺序,包括 for-each 和 for-in 循环。还有哪些因素可以改变这些循环类型组合的迭代顺序?

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

4

3 回答 3

8

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

单击此处查看 Colin Moock 在他的书中的话。

这里讨论了一些解决方法,但老实说,如果您需要保证顺序,那么只需使用常规的旧 for 循环并让它迭代(长度、numChildren 等)次数。

于 2009-03-07T00:34:17.090 回答
5

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

ECMA-262,第 12.6.4 节声明“枚举的顺序由对象定义” - 换句话说,它将取决于您是否正在遍历列表、字典、数组等。

希望大多数集合的文档将明确说明枚举顺序(或未定义顺序),但我没有检查...

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

于 2009-03-06T14:21:56.343 回答
2

评估顺序在 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 试试上述方法

于 2009-03-06T16:27:00.177 回答