Flash.Util.Dictionary使用方法
2010-03-23 12:44 宝宝合凤凰 阅读(538) 评论(0) 收藏 举报
关联数组:也称为”哈希”或”映射”。首先,他是一个数组(废话?:P)。但他不同于一般的数组,它使用”键”而非数字索引来组织存储的值。如同一般数组中每一个数字索引对应一个值一样,关联数组中的每个键都对应一个存储值。关联数组是 Object 类的实例,也就是说每个键都相当于一个属性名称,该键对应的值就是这个属性的值。关联数组是“键、值”对的无序集合(因为对象的属性是没有顺序的)。在代码中,不应期望关联数组的键按特定的顺序排列。 以下示例创建一个名为 monitorInfo 的关联数组,并使用对象文本初始化具有两个“键、值”对的数组: var monitorInfo:Object = {type:”Flat Panel“, resolution:”1600 x 1200″};
trace(monitorInfo["type"], monitorInfo["resolution"]);
// 输出:Flat Panel 1600 x 1200 如果在声明数组时不需要初始化,可以使用 Object 构造函数创建数组,如下所示: var monitorInfo:Object = new Object();
使用对象文本或 Object 类构造函数创建数组后,可以使用括号运算符 ([]) 或点运算符 (.) 在数组中添加值。以下示例将两个新值添加到 monitorArray 中: monitorInfo["aspect ratio"] = “16:10″; // 格式错误,请勿使用空格
monitorInfo.colors = “16.7 million”; trace(monitorInfo["aspect ratio"], monitorInfo.colors); // 输出:16:10 16.7 million 请注意,名为 aspect ratio 的键包含空格字符。也就是说,空格字符可以与括号运算符一起使用,但试图与点运算符一起使用时会生成一个错误。不建议在键名称中使用空格。 第二种关联数组创建方法是使用 Array 构造函数,然后使用括号运算符 ([]) 或点运算符 (.) 将键和值对添加到数组中。如果将关联数组声明为 Array 类型,则将无法使用对象文本初始化该数组。以下示例使用 Array 构造函数创建一个名为 monitorInfo 的关联数组,并添加一个名为 type 的键和一个名为 resolution 的键以及它们的值: var monitorInfo:Array = new Array();
monitorInfo["type"] = “Flat Panel“; monitorInfo["resolution"] = “1600 x 1200″; trace(monitorInfo["type"], monitorInfo["resolution"]); // 输出: Flat Panel 1600 x 1200 使用 Array 构造函数创建关联数组没有什么优势。即使使用 Array 构造函数或 Array 数据类型,也不能将 Array 类的 Array.length 属性或任何方法用于关联数组。最好将 Array 构造函数用于创建索引数组,而不建议用于构造关联数组。
Dictionary其实就是具有对象键的关联数组!它使用对象而非字符串作为键! import flash.display.Sprite;
import flash.utils.Dictionary; var groupMap:Dictionary = new Dictionary(); // 要用作键的对象 var spr1:Sprite = new Sprite(); var spr2:Sprite = new Sprite(); var spr3:Sprite = new Sprite(); // 要用作值的对象 var groupA:Object = new Object(); var groupB:Object = new Object(); // 在字典中创建新的“键、值”对。 groupMap[spr1] = groupA; groupMap[spr2] = groupB; groupMap[spr3] = groupB; if (groupMap[spr1] == groupA) { trace(”spr1 is in groupA”); } if (groupMap[spr2] == groupB) { trace(”spr2 is in groupB”); } if (groupMap[spr3] == groupB) { trace(”spr3 is in groupB”); } 可以使用 for..in 循环或 for each..in 循环来循环访问 Dictionary 对象的内容。for..in 循环用来基于键进行循环访问;而 for each..in 循环用来基于与每个键关联的值进行循环访问。 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); } 从 myMap 中删除 myObject 键: delete myMap[myObject]; __________________________________________________________________ 关于flex的Object和Dictionary建议多用Dictionary , 最好是取代object (object 不会被编辑器检测) , 下面是网上的关于Dictionary AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类。Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键。例如: var obj:Object = new Object(); 也就是说,无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的对象作为键,都会北转换成字符串”[object Object]“作为键,因此而指向了同一个数据。例如: ActionScript Code: Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。例如: import flash.utils.Dictionary; 虽然在trace的时候,输出的还是[object Object],但是这个结果是对象的toString的结果。在Dictionary对象中,代表的是不同的对象引用。 在Directionary类的构造函数中传入true 虽然dict中有引用到obj,但并不是一个有效引用,所以obj仍然会被垃圾回收 |
浙公网安备 33010602011771号