如何在Point索引的actionscript中创建一个关联数组?

时间:2009-09-02 16:47:26

标签: actionscript-3 dictionary associative-array

我希望我的关联数组由Point索引(或者,通常是Object),它具有语义相等性。不幸的是

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如何订购其密钥,还是有不同的类用于此类事情?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Dictionary会将对象放在不同的区域中,即使它们“相等”。如果用作键的两个对象导致插入时发生冲突,则Dictionary将仅使用下一个可用的bin来放置第二个对象,因为正如您所说,p!==q。但是使用Object(实质上仍然是地图)是不同的,它只检查是否p.equals(q)