flex Dictionary



flex Dictionary

以使用 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](key.md)); 
}

可以使用 for each..in 循环直接访问 Dictionary 对象的值.以下代码也使用 groupMap 字典来说明如何使用 for each..in 循环来循环访问 Dictionary 对象:

for each (var item:Object in groupMap)
{ 
trace(item); 
}

从 myMap 中删除 myObject 键:

delete myMap[myObject](myObject.md);

关于flex的Object和Dictionary 建议多用Dictionary , 最好是取代object (object 不会被编辑器检测) ,

下面是网上的关于Dictionary

AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类.Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键.例如:

var obj:Object = new Object(); obj“name” = 1; // 键是字符串”name” obj1 = 2; // 键是1 (被转换成字符串”1”) objnew Object() = 3; // 键是new Object(),被转传成字符串”object Object” for (var prop:String in obj) { trace(prop); // 输出:object Object, 1, name trace(objprop); // 输出:3, 2, 1 }

也就是说,无论用什么类型的变量作为键,都将被转换成字符串.同时,如果你使用了不同的对象作为键,都会北转换成字符串”object Object“作为键,因此而指向了同一个数据.例如:

ActionScript Code:
var a:Object = new Object();
var b:Object = new Object();
var obj:Object = new Object();
obja = 1; // obj[”[object Object”]] = 1;
objb = 2; // obj[”[object Object”]] = 2;
for (var prop:String in obj) {
trace(prop); // traces: object Object
trace(objprop); // traces: 2
}

Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型.例如:

import flash.utils.Dictionary; var a:Object = new Object(); var b:Object = new Object(); var dict:Dictionary = new Dictionary(); dicta = 1; // dicta = 1; dictb = 2; // dictb = 2; for (var prop:* in dict) { trace(prop); // traces: object Object, object Object trace(dictprop); // traces: 1, 2 }

虽然在trace的时候,输出的还是 object Object ,但是这个结果是对象的toString的结果.在 Dictionary 对象中,代表的是不同的对象引用.

在Directionary类的构造函数中传入true var dict:Dictionary = new Dictionary(true); // use weak references as keys var obj:Object = new Object(); dictobj = true; delete obj;

虽然dict中有引用到obj,但并不是一个有效引用,所以obj仍然会被垃圾回收