for-each ループと for-in ループの両方について、AS3 の配列、ディクショナリ、およびオブジェクト型の反復順序を知りたいです。また、これらのループ タイプの組み合わせの反復順序を変更できる要因は何ですか?
たとえば、配列型で for-each を使用すると、常に最初の要素から最後の要素に移動すると思います。For-each は Dictionary では使用できないため、for-in ループを使用して順序を決定するにはどうすればよいでしょうか?
for-each ループと for-in ループの両方について、AS3 の配列、ディクショナリ、およびオブジェクト型の反復順序を知りたいです。また、これらのループ タイプの組み合わせの反復順序を変更できる要因は何ですか?
たとえば、配列型で for-each を使用すると、常に最初の要素から最後の要素に移動すると思います。For-each は Dictionary では使用できないため、for-in ループを使用して順序を決定するにはどうすればよいでしょうか?
Colin Moock による Essential Actionscript 3.0 で述べられているように、for each in ループの順序は、XML または XMLList オブジェクトを列挙しない限り保証されません。
hereで説明されているように回避策がありますが、正直なところ、順序を保証する必要がある場合は、通常の古い for ループを使用して、繰り返し (長さ、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 で上記を試す