as3、辞書、連想配列
As3 Dictionary Associative Array
ヘルプドキュメントから
連想配列
「ハッシュ」または「マップ」と呼ばれることもある連想配列。数値インデックスの代わりに「キー」を使用して、格納されている値を整理します。連想配列の各キーは、格納されている値にアクセスするための一意の文字列です。オブジェクト連想配列はクラスの例であり、各キーはプロパティ名に対応します。連想配列は結合であり、順序付けられていないセットの値です。コードでは、キーは特定の順序で配置された連想配列を期待するべきではありません。
ActionScript 3.0では、の「ディクショナリ」と呼ばれる高度な連想配列が導入されています。ディクショナリの例ディクショナリクラスflash.utilsパッケージは、任意のデータ型のキーを使用しますが、通常はオブジェクトクラスの例です。言い換えれば、辞書キーは文字列型の値に限定されません。
このセクションでは、文字列をキーとして使用して配列を作成する方法と、Dictionaryクラスを使用する方法について説明します。
サブトピック
文字列キーを使用した連想配列 オブジェクトキーに関連付けられた配列文字列キーを使用した連想配列
ActionScript3.0で連想配列を作成する方法は2つあります。最初の方法は、Objectコンストラクターを使用することです。これには、テキストオブジェクトを使用して配列を初期化できるという利点があります。オブジェクトクラスインスタンス(「共通オブジェクト」とも呼ばれます)は、機能的には連想配列と同等です。各汎用オブジェクト属性名は、格納された値へのアクセスを提供するキーとして機能します。
次の例では、monitorInfo
連想配列というファイルと、2つの初期化キーと値のペアを持つ配列を使用したテキストオブジェクトを作成します。
[]
配列の宣言時に初期化されていない場合、配列は次のようにObjectコンストラクターを使用して作成できます。
.
オブジェクトまたはテキストを使用して配列を作成した後、オブジェクトクラスコンストラクターを使用できます。括弧演算子(monitorArray
)またはポイント演算子(aspect ratio
)配列に値を追加します。次の例では、2つの新しい値を[]
Inに追加します。
.
名前monitorInfo
キーにはスペース文字が含まれていることに注意してください。つまり、スペース文字は角かっこ演算子で使用できますが、ドット演算子で使用しようとするとエラーが発生します。キー名にスペースを使用することはお勧めしません。
2番目の方法は、Arrayコンストラクターを使用して連想配列を作成し、括弧演算子(type
)またはポイント演算子(resolution
)キーと値のペアを配列に追加することです。連想配列型Arrayを宣言する場合、オブジェクトリテラルを使用して配列を初期化することはできません。次の例では、Arrayコンストラクターを使用して、Array.length
連想配列というファイルを作成し、GroupA
Keysおよびcalled GroupB
Keysとその値というファイルを追加します。
GroupA
Arrayコンストラクターを使用して連想配列を作成する利点はありません。コンストラクターまたは配列配列データ型を使用する場合でも、配列クラスGroupB
プロパティまたは配列を関連付けるためのメソッドを使用することはできません。配列コンストラクターは、インデックス付き配列の作成に最適です。
オブジェクトキーに関連付けられた配列
連想配列キーとして使用する文字列の代わりに、Dictionaryクラスを使用してオブジェクトを作成できます。このような配列は、辞書、ハッシュ、またはマップと呼ばれることもあります。たとえば、スプライトオブジェクトに従って特定のコンテナに関連付けられたスプライトオブジェクトの位置を決定できるアプリケーションについて考えてみます。ディクショナリオブジェクトを使用して、各スプライトオブジェクトをコンテナにマップできます。
次のコードは、3つのキーを作成します。Dictionaryオブジェクトは、Spriteオブジェクトインスタンスとして使用されます。キーごとに値を割り当てました[]
またはfor..in
。値は任意のデータ型にすることができますが、この例ではfor each..in
for..in
Objectクラスの例です。次に、オペレーターは、次のコードに示すように、各アクセスキー値に関連付けられたプロパティアクセス(for each..in
)を使用できます。
for..in
オブジェクトキーを使用する反復
[]
サイクルまたはgroupMap
ループを使用してDictionaryオブジェクトのコンテンツにアクセスできます。for..in
キーに基づいて反復するためのループおよびfor each..in
に関連付けられた値を反復するためのベースループ各キー。
groupMap
オブジェクトキーディクショナリオブジェクトのサイクルへの直接アクセスを使用できます。プロパティアクセス演算子(for each..in
)を使用して、Dictionaryオブジェクトの値にアクセスすることもできます。次のコードは、前述のor each (var item:Object in groupMap)
Dictionaryを使用して、{
Loopを使用してDictionaryオブジェクトを反復処理する方法を示しています。
trace(item)
}
ディクショナリオブジェクトのサイクル値への直接アクセスを使用できます。次のコードもmyObject
ディクショナリを使用する方法を説明するためにmyObject
ループを使用してディクショナリオブジェクトを反復処理します。
null
オブジェクトキーとメモリ管理
Adobe Flash Playerは、ガベージコレクションシステムを使用して未使用のメモリを回復します。オブジェクトへの参照がない場合、ガベージコレクション、メモリである可能性があり、次のガベージコレクションシステムで実行を再開します。たとえば、次のコードは新しいオブジェクトを作成し、このオブジェクトの変数への参照を割り当てますmyObject
:
myObject
オブジェクトへの参照がある限り、ガベージコレクションシステムはオブジェクトが占有しているメモリを回復しません。 myMap
値を変更して別のオブジェクトを指すか、値に設定するmyObject
元のオブジェクトへの他の参照がない場合、元のオブジェクトが占有するガベージコレクションメモリである可能性があります。
myObject
別のキーがDictionaryオブジェクトとして使用されている場合、元のオブジェクトは参照として作成されます。たとえば、次のコードは2つのオブジェクト参照(myMap
変数とmyObject
オブジェクトキー)を作成します。
useWeakReference
ガベージコレクションのオブジェクト参照myMap
には、ガベージコレクションへのすべての参照を削除する必要があります。この場合、次のコードのように、myObject
および
var monitorInfo:Object = {type:'Flat Panel', resolution:'1600 x 1200'} trace(monitorInfo['type'], monitorInfo['resolution']) // output: Flat Panel 1600 x 1200Deleted
var monitorInfo:Object = new Object()Bondの値から変更する必要があります。
monitorInfo [ 'aspect ratio'] = '16:10' // malformed, do not use spaces monitorInfo.colors = '16.7 million' trace(monitorInfo['aspect ratio'], monitorInfo.colors) // Output: 16: 10 16.7 million
さらに、コンストラクターDictionary
var monitorInfo:Array = new Array() monitorInfo['type'] = 'Flat Panel' monitorInfo['resolution'] = '1600 x 1200' trace(monitorInfo['type'], monitorInfo['resolution']) // output: Flat Panel 1600 x 1200Parametersを使用できるため、すべての辞書キーが「弱参照」になります。ガベージコレクションシステムは弱参照を無視します。つまり、ガベージコレクションは弱参照オブジェクトのみになります。たとえば、次のコードでは、ガベージコレクションのオブジェクトを作成するために、from
import flash.display.Sprite import flash.utils.Dictionary var groupMap:Dictionary = new Dictionary() // to use as a key object var spr1:Sprite = new Sprite() var spr2:Sprite = new Sprite() var spr3:Sprite = new Sprite() // to be used as an object of value var groupA:Object = new Object() var groupB:Object = new Object() // Create a new key in the dictionary - value pairs. groupMap[spr1] = groupA groupMap[spr2] = groupB groupMap[spr3] = groupB if (groupMap[spr1] == groupA) { trace('spr1 is in groupA') } if (groupMap[spr2] == groupB) { trace('spr2 is in groupB') } if (groupMap[spr3] == groupB) { trace('spr3 is in groupB') }削除済み
for (var key:Object in groupMap) { trace(key, groupMap[key]) } / * Output: [object Sprite] [object Object] [object Sprite] [object Object] [object Sprite] [object Object] */は必要ありません。キー:
f|_+_| |_+_| |_+_| |_+_| / * Output: [object Object] [object Object] [object Object] */
複製:https://www.cnblogs.com/sun11086/archive/2009/03/16/1413285.html