我希望我的关联数组由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
如何订购其密钥,还是有不同的类用于此类事情?
答案 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)
。