如何在由Point索引的actionscript中创建关联数组?
我想我的关联数组索引Point
(或,一般来说,Object
)具有语义相等。不幸的是如何在由Point索引的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
如何订购它的钥匙,还是有不同的类中使用了这种类型的事情?
很显然,如果你使用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)
。
实际上,'Object'必须*不*检查'p == q',因为在这种情况下,它是错误的! (但'p.equals(q)'是真的) – 2009-09-02 23:05:55
可能已经发誓它回到我的真实。呃,没什么大不了的;反正不应该使用'=='。 – geowa4 2009-09-03 14:07:56
我还没有试过这个,这只是一个预感,但你肯定*这个工程?我怀疑它可能会在p上进行字符串转换,然后将其用作索引,因此所有点都会发生碰撞。 – grapefrukt 2009-09-02 17:29:26
我相信Object的键只是字符串,所以你用作键的任何非String对象都会被转换为一个字符串。 Object的toString()方法返回相同的内容,不管它的内容如何,所以这很可能不起作用。 – Herms 2009-09-02 18:21:37
它似乎。请参阅编辑 – 2009-09-02 23:01:38