您的位置:首页 > 移动开发 > Objective-C

AS3的Dictionary与关联数组Object的区别

2013-11-24 22:10 323 查看
以使用 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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ActionScript Dictionary