Maps in ActionScript
Maps are an ActionScript’s built-in associative data type (sometimes called hashes or dicts in other languages).
To create an empty map, use the new Object() or shorthand {} syntax.
var m:Object = {};Set key/value pairs using typical name[key] = val syntax.
m["k1"] = 7;
m["k2"] = 13;Printing a map with, for example, trace will show all of its key/value pairs.
trace("map:", m);Get a value for a key with name[key].
var v1:int = m["k1"];
trace("v1:", v1);If the key doesn’t exist, the undefined value of the value type is returned.
var v3:int = m["k3"];
trace("v3:", v3);The built-in length property can be emulated using a custom function to count the number of key/value pairs.
function mapLength(map:Object):int {
var count:int = 0;
for (var key:String in map) {
count++;
}
return count;
}
trace("len:", mapLength(m));Deleting a key/value pair in ActionScript can be done using the delete keyword.
delete m["k2"];
trace("map:", m);To remove all key/value pairs from a map, use a custom function to iterate and delete all keys.
function clearMap(map:Object):void {
for (var key:String in map) {
delete map[key];
}
}
clearMap(m);
trace("map:", m);The optional second return value when getting a value from a map indicates if the key was present in the map. This can be achieved using the in keyword.
var prs:Boolean = "k2" in m;
trace("prs:", prs);You can also declare and initialize a new map in the same line with this syntax.
var n:Object = {"foo": 1, "bar": 2};
trace("map:", n);Note that there is no maps package in ActionScript, but similar functionality can be built using custom functions. Here’s an equivalent to check if two maps are equal:
function mapsEqual(map1:Object, map2:Object):Boolean {
for (var key:String in map1) {
if (map1[key] !== map2[key]) {
return false;
}
}
for (key in map2) {
if (map1[key] !== map2[key]) {
return false;
}
}
return true;
}
var n2:Object = {"foo": 1, "bar": 2};
if (mapsEqual(n, n2)) {
trace("n == n2");
}Note that maps appear in the form {k:v, k:v} when printed with trace.
trace("map:", m);
trace("v1:", v1);
trace("v3:", v3);
trace("len:", mapLength(m));
trace("map:", m);
trace("map:", m);
trace("prs:", prs);
trace("map:", n);
trace("n == n2");