Actionscript 3 如何在actionscript中创建按点索引的关联数组?

Actionscript 3 如何在actionscript中创建按点索引的关联数组?,actionscript-3,dictionary,associative-array,Actionscript 3,Dictionary,Associative Array,我希望我的关联数组通过语义相等的点(或者通常是对象)进行索引。不幸的是 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 有没

我希望我的关联数组通过语义相等的
(或者通常是
对象
)进行索引。不幸的是

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

有没有办法告诉
字典
如何对它的键进行排序,或者对于这种类型的东西有不同的类可以使用?

显然,如果使用
对象
,它似乎可以按预期工作:

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

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

我没有尝试过,这只是一种预感,但你确定这有效吗?我怀疑它可能会在将p用作索引之前对其进行字符串转换,因此所有点都会发生冲突。我相信对象的键只是字符串,所以任何用作键的非字符串对象都会转换为字符串。对象的toString()方法返回相同的内容,而不管其内容如何,因此这很可能不起作用。它之所以有效,是因为点有一个很好的toString函数,它输出两个值(x=1,y=2),所以我想它会按照您想要的方式工作,尽管我不确定它是最漂亮的解决方案;)那么什么是最漂亮的解决方案呢?实际上,
对象
不能检查
p==q
,因为在这种情况下,它是假的!(但是
p.equals(q)
是真的)可以发誓它对我来说是真的。嗯,没什么大不了的;无论如何都不应该使用
=