1

我希望我的关联数组由具有语义相等性的Point(或者通常是 an )索引。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如何订购它的钥匙,或者有不同的类可用于这种类型的东西?

4

2 回答 2

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
于 2009-09-02T16:50:33.330 回答
0

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

于 2009-09-02T17:07:48.493 回答