まず、用語を整理すると、いいえ、結合配列は作成されませんでした。 AS3は、連想配列の実装を提供していません。連想配列は、キーと値のペアのシーケンスです(シーケンスは要素の順序を定義するという点でセットとは異なります)。ペアがユニークであるシーケンスは必要ありません(配列はシーケンスの特定のケースであり、配列には同じエレメントが複数回含まれるのが一般的です)。連想配列は同じ要素を複数回含むことがあります。典型的な例は、次のようなものを含むget要求です:example.org/?foo=bar&foo=bar
。
ここで、作成したものは、他のオブジェクトのセットにマッピングされる一連の文字列キーと考えることができます。すべての文字列は一意にする必要があります。一般に、他の言語では、この構造体はマップと呼ばれます。しかし、mapは特定の慣習的な実装を意味します。マップには通常、メモリ割り当て、高速アクセスのためのキーのハッシュ、マップに含まれる項目の数の計算などの特別な方法があります。マップをツリーとして実装することは珍しいことではありません。
最後に、ダイナミッククラスのインスタンスを作成し、それにいくつかのプロパティを追加しました。物事をさらに複雑にする:)クラスのプロパティは文字列ではありません!それらはQName(修飾名)です。私。名前空間と文字列キーのペア。これらのプロパティをバックアップするメカニズムはマップと非常によく似ていますが、実際のマップとして使用するコントロールはすべて与えられていません。
私は、ビューの「コンピュータ」の点から、よりストレートな方法は、いずれかの配列を使用することであろうことを確信させるために、このすべてを説明してきました:
var navItems:Array = [item_featuredfilms, item_nowshowing,
item_trailers, item_comingsoon, item_yourtickets];
その場合、後で缶に配列のオフセットである各要素navItems[x]
,x
を参照してください。この配列のfor-forループとfor-eachループを使用して、それぞれキーと値を反復することができます。
また、あなたは辞書を使用することができ、しかし、あなたはもともとやった方法ではない:
再び
var navItems:Dictionary = new Dictionary();
navItems[item_featuredfilms] = "featuredfilms";
. . .
navItems[item_yourtickets] = "yourtickets";
、後であなたがのために、内のキーを反復処理でき(キーはオブジェクトではなく文字列です) 、for-each(この例の値は文字列)を使用して値を上書きします。
どちらを選択するかはあなた次第です。あなたが検討しなければならない要素は次のとおりです。Array.indexOf()
は、最悪の場合、探している要素インデックスを見つけるために最悪の場合、配列の各要素を調べる必要があるため、O(n)操作です。dictionary[key]
はO 1)操作を行う。しかし、オブジェクトをキーで見つけ出す必要がある場合は、正反対です。array[index]
はO(1)操作ですが、必要なキーを見つけるために辞書をループする必要があります。
private function iterateTest():void
{
var dictionary:Dictionary = new Dictionary();
var array:Array = [];
// Array is a complex type, thus, it will be used
// by reference, and it is OK to use it as
// dictionary keys
var one:Array = ["one"];
var two:Array = ["two"];
var three:Array = ["three"];
var key:Object;
var value:Object;
dictionary[one] = 1;
dictionary[two] = 2;
dictionary[three] = 3;
// note, you could do this in plenty of ways,
// for example: array.push(one, two, three)
// or array = [one, two, three]
// I did it like this for consistency of this example only.
array[1] = one;
array[2] = two;
array[3] = three;
for each (value in dictionary) trace(value);
for (key in dictionary) trace(key, dictionary[key]);
for each (value in array) trace(value);
for (key in array) trace(key, array[key]);
// Output:
// 1
// 2
// 3
// one 1
// two 2
// three 3
// one
// two
// three
// 1 one
// 2 two
// 3 three
}
出力にあなたが数字を参照してくださいどこの出力にあなたは枢機卿を見るたびに、実際の数は、複雑なオブジェクトを使用した、コードで使用されました。
今のところNevermind: – Nick