我想我的关联数组由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如何订购它的钥匙,还是有不同的类中使用了这种类型的事情?

有帮助吗?

解决方案

显然,如果你使用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

其他提示

一个Dictionary将放置在不同的频段的物体,即使它们是“相等”。如果用作键的两个物体会导致在插入碰撞,词典会简单地使用下一个可用箱柜放置第二个对象,因为,如你所说,p!==q。但使用Object(这仍然是,在本质上,一个地图)不同的是,它只检查是否p.equals(q)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top