在AS3中,我想要一个类型为[Point] --->的关联数组。 [形状],将各种形状与空间中的点相关联。我想有这种行为:
var dict : Dictionary = new Dictionary();
var pos : Point = new Point(10, 10);
dict[pos] = new Shape();
var equalPos : Point = new Point (pos.X, pos.Y);
dict[equalPos] // <-- returns undefined and not the shape i created before because equalPos reference is different from pos.
我希望让dict[equalPos]
返回与dict[pos]
相同的值,因为这些点在引用中不同,等于坐标(等于类成员)。
有什么方法可以达到这个目的吗?
答案 0 :(得分:2)
更改字典的键,使用点'x和y
var key:String = point.x + "_" + point.y;//you could define a function to get key;
dict[key] = new Shape();
答案 1 :(得分:1)
我不相信你能按照你想要的方式做到这一点。
我相信你需要做的是创建一个辅助函数。 (我在尝试比较单元测试中的点时遇到同样的问题)
所以在这里,使用伪代码就是我要做的。
public static function comparePoint(point1:Point, point2:Point):Boolean{
return (poin1.x == poin2.x && point1.y == point2.y)? true:false;
}
private function findShapeInPointDictionary(dict:Dictionary, point:Point):Shape
{
var foundShape:Shape = null;
for (var dictPoint:Point in dict) {
if(comparePoint(dictPoint, point) {
foundShape = dict[dictPoint];
}
}
return foundShape;
}
}
您的示例代码可能最终看起来像这样
var dict : Dictionary = new Dictionary();
var pos : Point = new Point(10, 10);
dict[pos] = new Shape();
var equalPos : Point = new Point (pos.X, pos.Y);
recievedShape = findShapeInPointDictionary(dict, equalPos);