以使用 for..in 循环或 for each..in 循环来循环访问 Dictionary 对象的内容。for..in 循环用来基于键进行循环访问;而 for each..in 循环用来基于与每个键关联的值进行循环访问。
可以使用 for..in 循环直接访问 Dictionary 对象的对象键。还可以使用属性访问运算符 ([]) 访问 Dictionary 对象的值。以下代码使用前面的 groupMap 字典示例来说明如何使用 for..in 循环来循环访问 Dictionary 对象:
for (var key:Object in groupMap)
{
trace(key, groupMap[key]);
}
可以使用 for each..in 循环直接访问 Dictionary 对象的值。以下代码也使用 groupMap 字典来说明如何使用 for each..in 循环来循环访问 Dictionary 对象:
for each (var item:Object in groupMap){
trace(item);
}
delete myMap[myObject];
从 myMap 中删除 myObject 键:
-----------------------------------------------------------------------------------------------------------------------------------------------------
Dictionary是一种以键值类型的数据结构,和Object一样,在as中能够用把他看成是Hash。一直以来不明白他和Object的区别在哪里,今天终于看到了答案。API上说Dictionary可够以任何类型的对象作为键来使用,可测试的结果是Object也能够做到啊。原来是我没有弄清楚,原来object对于任何作为键的对象都会调用其toString()方法,使用这个字符串作为键,这就造成了原来的误解了
var obj:Object = new Object();
var key:Sprite = new Sprite();
obj[key] = 300;
for(var p:String in obj)
{
trace(p);//[object Sprite]
trace(obj[p]);//300
}
这里虽然输出的键是[object Sprite],但要注意的是,他只是一个字符串,并不是对象的toString()方法。p:String 可以证明这点。
那么现在我们用Dictionary来实现同样的功能。
var obj:Dictionary = new Dictionary();
var key:Sprite = new Sprite();
obj[key] = 300;
for(var p:String in obj)
{
trace(p);//[object Sprite]
trace(obj[p]);//undefined
}
这里的输出就看出了两者的不同了,[object Sprite]同样是一个字符串他是键对象的toString()。把这个字符串作为键来查找对应的值,返回是undefined。这是对的,因为键应该是一个对象而不是一个对象的toString()。
稍做一下改动。
for(var p:* in obj)
这里的p使用的任意类型,这样作为键的对象就不会被toString()了。输出了正确的300。