AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类。Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键。例如:
var obj:Object = new Object();
obj["name"] = 1; // 键是字符串"name"
obj[1] = 2; // 键是1 (被转换成字符串"1")
obj[new Object()] = 3; // 键是new Object(),被转传成字符串"[object Object]"
for (var prop:String in obj) {
? ?? ?trace(prop); // 输出:[object Object], 1, name
? ?? ?trace(obj[prop]); // 输出:3, 2, 1
}
也就是说,无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的对象作为键,都会被转换成字符串"[object Object]"作为键,因此而指向了同一个数据。例如:
var a:Object = new Object();? ?
var b:Object = new Object();? ?
var obj:Object = new Object();? ?
obj[a] = 1; // obj["[object Object]"] = 1;? ?
obj[b] = 2; // obj["[object Object]"] = 2;? ?
for (var prop:String in obj) {? ?
? ?? ?trace(prop); // traces: [object Object]? ?
? ?? ?trace(obj[prop]); // traces: 2? ?
}
Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。例如:
import flash.utils.Dictionary;
var a:Object = new Object();
var b:Object = new Object();
var dictictionary = new Dictionary();
dict[a] = 1; // dict[a] = 1;
dict[b] = 2; // dict[b] = 2;
for (var prop:* in dict) {
? ?? ?trace(prop); // traces: [object Object], [object Object]
? ?? ?trace(dict[prop]); // traces: 1, 2
}
注意:
1、虽然在trace的时候,输出的还是[object Object],但是这个结果是对象的toString的结果。在Dictionary对象中,代表的是不同的对象引用。
2、这里的prop的类型是*。这是很重要的,因为dict对象中的键可能是任何数据类型的。
以下是本人对Dictionary与Object的不同之处的一个小结:
1、Object的键必须是字符串,或表示字符串的表达式(变量或函数),若不是字符串的表达式,则将调用toString()方法,将其转化为字符串;
2、与Object不同的是,Dictionary使用的键是对象的引用,而不是字符串,且非原始对象键调用之前是通过全等运算符(===)来进行判断,并不会将数据类型强制转换之后再进行判断。
但是,对于Dictionary的具体作用还不甚清楚,需要以后进一步研究……
详细解决方案
AS3.0的Dictionary种
热度:112 发布时间:2012-09-02 21:00:34.0
相关解决方案
- ArrayList,Hashtable,List<T>Dictionary<K,V>
- ArrayList 加入 Dictionary<string, decimal>的有关问题
- System.ArgumentException: Item has already been added. Key in dictionary: 'Id' Key being added: 'Id',该如何处理
- 关于C# Dictionary 的一个疑点
- 如何实现 Dictionary<string, Image> 还可以通过索引取值
- Dictionary 的JSON无法反序列化解决思路
- TypeError:参数“ dictionary”有多个值
- Google Dictionary API现在是否属于Google自定义引擎?
- Mysql : InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!
- 集合(2)——Dictionary字典(1)——Dictionary(字典)→ Hashtable等集合类
- C#中的集合ArrayList、List、Hashtable、Dictionary
- Python菜鸟--字典(Dictionary)
- LeetCode 269 / LintCode 892 Alien Dictionary
- Dictionary 原理
- 两数之和 (c# Dictionary 解法)
- Python第五、六种数据类型——Set(集合) and Dictionary(字典)
- Leetcode 269. Alien Dictionary(python)
- C#学习(面向对象)Day11——集合ArrayList、List<T>、Stack、Stack<T>、Queue、Queue<T>、Dictionary、HashTable
- uva 12504 Updating a Dictionary
- Swift中文教程 -- 集合类型(Array,Dictionary)
- Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘).
- lua遍历调用C#泛型List、IEnumberable、Dictionary
- Leetcode 953. Verifying an Alien Dictionary
- UVA 12504 Updating a Dictionary(算法竞赛入门经典,stl)
- python的列表(List)、 元组、字典(Dictionary)
- python 数据结构--Dictionary(字典)
- data dictionary cache 命中率
- python中关于列表(list)、元组(tuple)、词典(dictionary)和集合(set)的小结
- 论文笔记:Learning Named Entity Tagger using Domain-Specific Dictionary
- Python 字典(Dictionary) keys()方法