2

在 AS3 中,我想要一个 [Point] ---> [Shape] 类型的关联数组,它将各种形状与空间中的点相关联。我想有这种行为:

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]因为这些点虽然在引用中不同,但与坐标相同(与类成员相同)。

有什么办法可以做到这一点?

4

2 回答 2

2

更改字典的键,使用点'x和y

var key:String = point.x + "_" + point.y;//you could define a function to get key;

dict[key] = new Shape();
于 2013-09-15T14:48:10.680 回答
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);  
于 2013-09-15T13:52:47.157 回答