2009-09-02 3 views
1

意味配列がPoint(または、一般的にはObject)でインデックスされた連想配列を意味します。残念ながらActionscriptで連想配列を作成するにはどうすればいいですか?

var p:Point = new Point(1, 1); 
var q:Point = new Point(1, 1); 

var dict:Dictionary = new Dictionary(); 
dict[p] = 5; 
trace(dict[p]); // => 5 
trace(dict[q]); // => undefined 

trace(p===q); // => false 

は、そのキーを注文する方法Dictionaryを伝えるためにどのような方法があり、または物のこのタイプのために使用する別のクラスがあるので?どうやら

答えて

0

あなたがObjectを使用している場合、意図したとおりに動作するようです:

var p:Point = new Point(1, 1); 
var q:Point = new Point(1, 1); 
var r:Point = new Point(1, 2); 

var dict:Object = new Object(); 
dict[p] = 5; 
trace(dict[p]); // => 5 
trace(dict[q]); // => 5 
trace(dict[r]); // => undefined 
+0

私はこれを試していない、それはちょうど愚かですが、あなたは確かです*これは動作しますか?私はそれがインデックスとして使用する前にpの文字列変換を行うかもしれないと思われるので、すべてのポイントが衝突します。 – grapefrukt

+0

私はObjectのキーは文字列なので、キーとして使用するString以外のオブジェクトは文字列に変換されると思います。 ObjectのtoString()メソッドは内容にかかわらず同じものを返します。したがって、これはうまくいかない可能性があります。 – Herms

+0

それはそうです。編集 –

0

Dictionaryは、彼らが「同じ」であっても、異なるビン内のオブジェクトを配置します。キーとして使用されている2つのオブジェクトが挿入時に衝突すると、辞書は次の使用可能なビンを単に使用して2番目のオブジェクトを配置します。これは前述のようにp!==qです。しかしObject(これはまだ本質的には地図です)を使用すると、p.equals(q)かどうかだけがチェックされます。

+0

実際には、 'Object'は' p == q'をチェックしません。この場合はfalseです。 (しかし、 'p.equals(q)'は真です) –

+0

はそれが私のために真実を返すと断言できました。 meh、no bigie;とにかく '=='を使うべきではありません。 – geowa4

関連する問題