質問

for-eachループとfor-inループの両方について、AS3のArray、Dictionary、およびObject型の反復順序を知りたいです。また、これらのループタイプの組み合わせの反復順序を変更できる要因は何ですか?

たとえば、Arrayタイプでfor-eachを使用すると、常に最初の要素から最後の要素に移動すると想定しています。 For-eachは辞書では使用できないため、for-inループを使用して順序はどのように決定されますか?

役に立ちましたか?

解決

for-eachループの for(x in y)タイプを意味しますか? AS3仕様では、forループは「ECMA-262エディション3およびE4X」で定義されているのと同じ構文とセマンティクスを持っていると述べています。

ECMA-262、セクション12.6.4では、「列挙の順序はオブジェクトによって定義される」と述べています。 -つまり、リスト、辞書、配列などを繰り返し処理するかどうかに依存します。

ほとんどのコレクションのドキュメントに列挙順序が明示的に記載されている(または順序が定義されていない)ことを希望しますが、チェックしていません...

編集:残念ながら、仕様では、「プロパティを列挙するメカニズム[...]は実装に依存している」と述べています。配列ドキュメントには、順序を指定するものは何もありません。正直言って、少し不満足です:(

他のヒント

Colin MoockによるEssential Actionscript 3.0で述べられているように、XMLまたはXMLListオブジェクトを列挙しない限り、for eachループの順序は保証されません。

コリン・モックの本からの言葉はここをクリックしてください。

説明されている回避策がありますここ、しかし正直なところ、順序を保証する必要がある場合は、通常の古い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で上記を試してください

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top