アドビが提供する説明は、正直に言うと正確でも正確でもありませんが、より単純で、ほとんどの場合をカバーしています。
次のことを試してください。
for (var key:* in dic) trace(getQualifiedClassName(key));//will give you 'String'
Array
この動作はとにも当てはまりObject
ます。
経験則として:と他のキーは文字列表現に変換されます (boolean 値と float 値、および をint
含む) 。 int
null
undefined
このDictionary
クラスは、非プリミティブ オブジェクトを に変換せず、String
直接キーとして使用するという点で異なります。他のすべての値を処理する方法はObject
、必要に応じて「継承」されます。
基本的に、Object
は文字列用と整数キー用の 2 つのハッシュで構成されます。そしてDictionary
、おそらく単にオブジェクトのメモリアドレスを整数キーとして使用して、別のハッシュを追加します。
編集:実際の質問に対する実際の回答ではありませんが、Triynko のコメントに応じて、詳細に説明したい点です:
ハッキー?つまり、機能するように設計されていない方法で機能させるということですか? ええと... 64 ビット整数を処理するように設計されていないため、もちろんハックです。しかし、64 ビットは 64 ビットであり、整数または浮動小数点として解釈されます。
64 ビット整数を表すために 64 ビット浮動小数点数を使用することは、意味的に完全に間違っているため、すでに悪い考えです (通常、この種の誤用から問題が発生することが予想されます)。
しかし、文字列表現をキーとして使用することは (float をキーとして使用すると暗黙のうちに発生します)、単純な自殺行為です。
var f1:Number = 1000000000000003000000000.0;
var f2:Number = 1000000000000002000000000.0;
trace(f1 == f2);//false
trace(String(f1) == String(f2));//true ... kabooooom
前提条件は、float として解釈される値の文字列表現が等しい必要があるため、2 つの 64 ビット int がいつ衝突するかを判断するのは困難です。また、異なるプレーヤー バージョンでは、フロートの文字列変換が異なる場合があり、LightSparkなどの代替ランタイムも同様です。私は本当にこれに頼りたくありません。これにより、衝突を引き起こすのに十分なデータがある場合に、どこからともなく出てくるようなバグが発生します。そして、それらを追跡することを楽しむことはできません.
また、浮動キーは、ハッシュ検索に使用する前に文字列に変換する必要があるため、パフォーマンスが低下します。サイズが本当に気になる場合は、データを 64 ビット int として送信し、フラッシュ側でのみ 16 進文字列に変換する必要があります。とはいえ、多くの
人が XML や JSON の使用に非常に満足し
ていることは指摘しておきますが、XML や JSON ははるかにオーバーヘッドが大きくなります。
帯域幅とその他のハードウェア リソースは安価です。開発には費用がかかります。メンテナンスが容易で堅牢なアプリを作成する必要があります。そうしないと、長期的にはコストが高くなります。
グリッツback2dos