2013-09-15 2 views
2

В AS3 я хочу иметь ассоциативный массив типа [Point] ---> [Shape], который связывает различные формы с точками в пространстве. Я хотел бы, чтобы это поведение:Словарь ActionScript3

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], потому что точки, в то время как другие в ссылках, равны как координаты (равно как члены класса).

Есть ли способ, которым я могу это достичь?

ответ

2

Изменить ключ словаря, используйте точку»х и у

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

dict[key] = new Shape(); 
1

Я не верю, что вы можете сделать это так, как хотите.

Я считаю, что вам нужно создать вспомогательную функцию. (У меня была эта же проблема, пытающаяся сравнить точки в тестах модулей)

Итак, здесь, используя код psuedo, я бы это сделал.

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

Если у вас есть время спустя я как увидеть ваше решение, спасибо! – Banex

+0

@Banex надеюсь, что помогает. Не забудьте выполнить модульный тест кода! :) – Bob

Смежные вопросы