字典(dictionary)是一些元素的结合。每个元素有一个称作key的域,不同元素的key各不相同。
其抽象数据类型描述为:
抽象数据类型Dictionary
{
实例:
具有不同关键字的元素组合
操作:
set(key,value):向字典中添加新元素。
delete(key):通过使用键值来从字典中移除键值对应的数据值。
has(key):如果某个键值存在于这个字典中,则返回true,反之则返回false。
get(key):通过键值查找特定的数值并返回。
clear():将这个字典中的所有元素全部删除。
size():返回字典所包含元素的数量。与数组的length属性类似。
keys():将字典所包含的所有键名以数组形式返回。
values():将字典所包含的所有数值以数组形式返回。}
有重复元素的字典(dictionary with duplicates)与上面定义的字典相似,只是它允许多个元素有相同的关键字。在有重复元素的字典中,在进行搜索和删除时需要一个规则来消除歧义。也就是说,如果要搜索关键字为k的元素,那么在所有关键字为k值得元素中应该返回哪一个。
字典可以保存在线性序列(e1,e2,e3...)中,既可以用公式化描述的方式,也可以用链表的方式实现。在字典中,我们用[键,值]的形式来存储数据。
//创建一个空的实例数组
var items = {};
判断某个值是否存在
使用JavaScript中的in操作符来验证一个key是否是items对象的一个属性。
this.has = function (key) {
return key in items;
};
添加新元素
直接将value设为items对象的key属性的值。它可以用来给字典添加一个新的值,或者用来更新一个已有的值。
this.set = function (key, value) {
items[key] = value; //value设为items对象的key属性的值
};
移除键值对应的数据值
remove操作符来从items对象中移除key属性。
this.delete = function (key) {
if (this.has(key)) {
delete items[key];
return true;
}
return false;
};
查找一个特定的项
使用三目运算符判断,简洁明了。
this.get = function (key) {
return this.has(key) ? items[key] : undefined;
};
字典所包含的所有数值以数组形式返回
使用has函数来验证key确实存在,然后将它的值加入values数组。
this.values = function () {
var values = [];
for (var k in items) { //遍历数组
if (this.has(k)) {
values.push(items[k]); //如果存在,加入数组中
}
}
return values;
};
返回在Dictionary类中所有用于标识值的键名
this.keys = function () {
return Object.keys(items);
};
items属性的输出值
this.getItems = function () {
return items;
};
移除集合中的所有项
直接将字典集置空
this.clear = function () {
items = {}; // 直接制空
};
返回集合所包含元素的数量
this.size = function () {
return Object.keys(items).length; //返回长度
};
//创建字典对象
var dictionary = new Dictionary();
//添加三个元素
dictionary.set('Jack', '[email protected]');
dictionary.set('John', '[email protected]');
dictionary.set('yjk', '[email protected]');
//判断是否存在
console.log(dictionary.has('Gandalf')); //false
//返回长度
console.log(dictionary.size()); //3
//返回字典中的键值
console.log(dictionary.keys()); //["Jack", "John", "yjk"]
//返回字典的值
console.log(dictionary.values()); //["[email protected]", "[email protected]", "[email protected]"]
//得到yjk的电子邮件
console.log(dictionary.get('yjk')); //[email protected]
//删除john的内容
dictionary.delete('John');
//查看字典
console.log(dictionary.keys()); //["Jack", "yjk"]
console.log(dictionary.values()); //["[email protected]", "[email protected]"]
console.log(dictionary.getItems()); //{Jack: "[email protected]", yjk: "[email protected]"}
数据结构--字典__源代码