ActionScript3-Wörterbücher - ActionScript-3, Wörterbuch

In AS3 möchte ich ein assoziatives Array vom Typ [Point] ---> [Shape] haben, das verschiedene Formen mit Punkten im Raum assoziiert. Ich möchte dieses Verhalten haben:

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.

Ich hätte gerne dict[equalPos] dasselbe zurückgeben wie dict[pos] weil die Punkte, während sie in Referenzen unterschiedlich sind, gleich sind wie Koordinaten (gleich wie Klassenmitglieder).

Kann ich das irgendwie erreichen?

Antworten:

2 für die Antwort № 1

Ändern Sie den Schlüssel des Wörterbuchs, verwenden Sie den Punkt "x und y"

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

dict[key] = new Shape();

1 für die Antwort № 2

Ich glaube nicht, dass du das so machen kannst, wie du es willst.

Ich glaube, was Sie tun müssen, ist eine Hilfsfunktion zu erstellen. (Ich hatte das gleiche Problem versucht, Punkte in Unit Tests zu vergleichen)

Also, hier ist die Verwendung von Pseudo-Code, was ich tun würde.

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;

}
}

Ihr Beispielcode könnte am Ende so aussehen

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);

Am beliebtesten