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

以使用 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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值