/*
Dictionary类:本类实现了字典功能,所有方法、属性都模仿System..Collection.Generic.Dictionary类 构造函数:
Dictionary()
属性:
CompareMode:比较模式,0——二进制 1——文本 Count:字典中的项目数
ThrowException:遇到错误时,是否抛出异常 方法: Item(key):获取指定键对应的值 Keys():获取键数组
Values():获取值数组 Add(key,value):将指定的键和值添加到字典中 BatchAdd(keys,values):尝试将指定的键和值数组添加到字典中,如果全部添加成功,返回true;否则返回false。 Clear():清除字典中的所有项
ContainsKey(key):字典中是否包含指定的键
ContainsValue(value):字典中是否包含指定的值 Remove(key):删除字典中指定的键
TryGetValue(key,defaultValue):尝试获取字典中指定键对应的值,如果键不存在,返回默认值 ToString():返回字典中所有键和值组成的字符串,格式为“逗号分隔的键列表 分号 逗号分隔的值列表” var dic =new Dictionary();
dic.Add('11','1');
if(dic.ContainsKey('22')){
alert(dic.Item('22'));
}
dic.Clear();
*/ function Dictionary() {
var me = this; //将this指针保存到变量me中 this.CompareMode = 1; //比较关键字是否相等的模式,0——二进制;1——文本 this.Count = 0; //字典中的项目数 this.arrKeys = new Array(); //关键字数组 this.arrValues = new Array(); //值数组 this.ThrowException = true; //遇到错误时,是否用throw语句抛出异常 this.Item = function (key) //Item方法,获取指定键对应的值。如果键不存在,引发异常
{
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
return me.arrValues[idx];
}
else {
if (me.ThrowException)
throw "在获取键对应的值时发生错误,键不存在。";
}
} this.Keys = function () //获取包含所有键的数组 {
return me.arrKeys;
} this.Values = function () //获取包含所有值的数组
{
return me.arrValues;
} this.Add = function (key, value) //将指定的键和值添加到字典中 {
if (CheckKey(key)) {
me.arrKeys[me.Count] = key;
me.arrValues[me.Count] = value;
me.Count++;
}
else {
if (me.ThrowException)
throw "在将键和值添加到字典时发生错误,可能是键无效或者键已经存在。";
}
} this.BatchAdd = function (keys, values) //批量增加键和值数组项,如果成功,增加所有的项,返回true;否则,不增加任何项,返回false。 {
var bSuccessed = false;
if (keys != null && keys != undefined && values != null && values != undefined) {
if (keys.length == values.length && keys.length > 0) //键和值数组的元素数目必须相同
{
var allKeys = me.arrKeys.concat(keys); //组合字典中原有的键和新键到一个新数组
if (!IsArrayElementRepeat(allKeys)) //检验新数组是否存在重复的键
{
me.arrKeys = allKeys;
me.arrValues = me.arrValues.concat(values);
me.Count = me.arrKeys.length;
bSuccessed = true;
}
}
}
return bSuccessed;
} this.Clear = function () //清除字典中的所有键和值 {
if (me.Count != 0) {
me.arrKeys.splice(0, me.Count);
me.arrValues.splice(0, me.Count);
me.Count = 0;
}
} this.ContainsKey = function (key) //确定字典中是否包含指定的键 {
return GetElementIndexInArray(me.arrKeys, key) != -1;
} this.ContainsValue = function (value) //确定字典中是否包含指定的值 {
return GetElementIndexInArray(me.arrValues, value) != -1;
} this.Remove = function (key) //从字典中移除指定键的值 {
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
me.arrKeys.splice(idx, 1);
me.arrValues.splice(idx, 1);
me.Count--;
return true;
}
else
return false;
} this.TryGetValue = function (key, defaultValue) //尝试从字典中获取指定键对应的值,如果指定键不存在,返回默认值defaultValue
{
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
return me.arrValues[idx];
}
else
return defaultValue;
} this.ToString = function () //返回字典的字符串值,排列为: 逗号分隔的键列表 分号 逗号分隔的值列表 {
if (me.Count == 0)
return "";
else
return me.arrKeys.toString() + ";" + me.arrValues.toString();
} function CheckKey(key) //检查key是否合格,是否与已有的键重复
{
if (key == null || key == undefined || key == "" || key == NaN)
return false;
return !me.ContainsKey(key);
} function GetElementIndexInArray(arr, e) //得到指定元素在数组中的索引,如果元素存在于数组中,返回所处的索引;否则返回-1。 {
var idx = -1; //得到的索引 var i; //用于循环的变量 if (!(arr == null || arr == undefined || typeof (arr) != "object")) {
try {
for (i = 0; i < arr.length; i++) {
var bEqual;
if (me.CompareMode == 0)
bEqual = (arr[i] === e); //二进制比较 else
bEqual = (arr[i] == e); //文本比较
if (bEqual) {
idx = i;
break;
}
}
}
catch (err) {
}
}
return idx;
} function IsArrayElementRepeat(arr) //判断一个数组中的元素是否存在重复的情况,如果存在重复的元素,返回true,否则返回false。 {
var bRepeat = false;
if (arr != null && arr != undefined && typeof (arr) == "object") {
var i;
for (i = 0; i < arr.length - 1; i++) {
var bEqual;
if (me.CompareMode == 0)
bEqual = (arr[i] === arr[i + 1]); //二进制比较 else
bEqual = (arr[i] == arr[i + 1]); //文本比较
if (bEqual) {
bRepeat = true;
break;
}
}
}
return bRepeat;
}
}
05-17 04:14