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()方法,使用这个字符串作为键,这就造成了原来的误解了
这里虽然输出的键是[object Sprite],但要注意的是,他只是一个字符串,并不是对象的toString()方法。p:String 可以证明这点。
那么现在我们用Dictionary来实现同样的功能。
这里的输出就看出了两者的不同了,[object Sprite]同样是一个字符串他是键对象的toString()。把这个字符串作为键来查找对应的值,返回是undefined。这是对的,因为键应该是一个对象而不是一个对象的toString()。
稍做一下改动。
可以使用 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。
相关文章推荐
- [转]AS3中Object与Dictionary的区别
- AS3中Object与Dictionary的区别
- AS3中Object与Dictionary的区别
- Study Flex《AS3中Object与Dictionary的区别》
- AS3中Object与Dictionary的区别
- AS3中Object与Dictionary的区别 !
- AS3中Object与Dictionary的区别
- AS3 AS3 object 和Dictionary的区别、===和==区别
- C# 数组、ArrayList、List、Dictionary的用法与区别
- c#中Dictionary、ArrayList、Hashtable和数组 Array 的区别
- c#中Dictionary、ArrayList、Hashtable和数组的区别是什么?[转]
- c#中Dictionary、ArrayList、Hashtable和数组 Array 的区别(转)
- AS3的Object和Dictionary
- c#中List、Dictionary、ArrayList、Hashtable和数组的区别
- Objective-C数组 NSArray与NSMutableArray的区别 NSDictionary与 NSMutableDictionary 的区别 == int,NSInteger,NSUIn
- c#中List、Dictionary、ArrayList、Hashtable和数组的区别是什么?
- C# 数组、ArrayList、List、Dictionary的用法与区别
- flex中dictionary跟Object的区别与遍历
- 数组[0]和[firstobject]的区别
- 关联数组map和关联容器set的用法和二者的区别