I’ve got some Map structure that looks like this:
var edges:Map<Vector2, List<Vector2> >;
When I add some values, like:
edges[new Vector2( 100, 100)] = new Vector2(300, 500);
and then check if
edges.exists(new Vector2( 100, 100 ) ) I got
false as a return.
How are the Keys compared then?
Is there any way to make it work?
Why it doesn’t?
Omg. Why does
new Vector2( 100, 100).equals( new Vector2( 100, 100) ) returns
new Vector2( 100, 100) == new Vector2( 100, 100) returns
It’s because Vector2 is a class and
== on objects compares the “pointer” not the actual content.
This will work:
var vec = new Vector2 (100, 100);
edges[vec] = new Vector2 (300, 500);
trace (edges.exists (vec));
I’m not sure how you would do it by value, perhaps something like…
edges = new Vector2 (300, 500);
var edge = edges;
trace (edge != null && edge.exists (100));
Map<Int, Map<Int, Vector2>>
As they said, comparing two instances of a class are going to be different, but perhaps a custom Map implementation (another approach?) could use the
equals method when comparing
This could also work using an array I think