首页 > 网站 > WEB开发 > 正文

js实现hashtable的赋值、取值、遍历

2024-04-27 14:12:07
字体:
来源:转载
供稿:网友

js实现hashtable的赋值、取值、遍历

  哈希表(Hashtable)这个概率应该是#c里面的概念,用来赋值、取值、遍历、排序操作提高效率。想起这个东西其实使我们以前经常遇到这样的面试题,一个很大的数组可能有100000个,如何快速知道它里面的出现最多的次数,那么这里我们可能就要用Hashtable的相关知识了。javascript中,object的实现就是hash表,因此只要在object上封装点方法,再利用原生的hasOwnPRoperty方法就可以实现简单高效的hashtable。

一,什么是哈希表(Hashtable)

二,哈希表的简单操作

三,js模拟哈希表的简单操作

一,什么是哈希表(Hashtable)

  Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对。

二,哈希表的简单操作C#

  在哈希表中添加一个key/value键值对:

HashtableObject.Add(key,value);

  在哈希表中去除某个key/value键值对:

HashtableObject.Remove(key);

  从哈希表中移除所有元素:

HashtableObject.Clear();

  判断哈希表是否包含特定键key:

HashtableObject.Contains(key);

三,js模拟哈希表的简单操作

    HashTable.prototype = {                contructor:HashTable,                //初始化                initialize:function(){                    this.obj = {};                },                //获取hashTable中对象唯一出现的次数                count:function(){                    var count = 0;                    for(var i in this.content) count++;                    return count;                },                //返回hashTable中的值                items:function(key){                    if(this.contains(key)){                        return this.obj[key];                    }                },                //增加值到hashtable                add:function(key,value){                    if(this.obj.hasOwnProperty(key)){                        return false;                    }else{                        this.obj[key] = value;                        return true;                    }                },                //清空hashtable中的值                clear:function(){                    this.obj = {};                },                //检测hashTable对象中是否含有此属性                contains:function(key){                    return this.obj.hasOwnProperty(key);                },                //移除hashTable中对象的值                remove:function(key){                    delete this.obj[key];                }            } 

  这样我们就能像c#语言里面的那样进行操作了。

  还一个简单的变体版:

        // js哈希表         function HashTable() {             this.ObjArr = {};             this.Count = 0;             //添加             this.Add = function(key, value) {                 if (this.ObjArr.hasOwnProperty(key)) {                     return false; //如果键已经存在,不添加                 }else {                     this.ObjArr[key] = value;                     this.Count++;                     return true;                 }             }             //是否包含某项             this.Contains = function(key) {                 return this.ObjArr.hasOwnProperty(key);             }             //取某一项 其实等价于this.ObjArr[key]             this.GetValue = function(key){                 if (this.Contains(key)) {                     return this.ObjArr[key];                 }else {                     throw Error("Hashtable not cotains the key: " + String(key)); //脚本错误                     //return;                 }             }             //移除             this.Remove = function(key) {                 if (this.Contains(key)) {                     delete this.ObjArr[key];                     this.Count--;                 }             }             //清空             this.Clear = function(){                 this.ObjArr = {}; this.Count = 0;             }         }                                 //员工         function employee(id, userName) {             this.id = id;             this.userName = userName;         }         function test() {             var ht = new HashTable();             var tmpEmployee = null;             for (var i = 1; i < 6; i++) {                 tmpEmployee = new employee(i, "Employee_" + i);                 ht.Add(i, tmpEmployee);             }             for (var i = 1; i <= ht.Count; i++) {                 alert(ht.GetValue(i).userName); //其实等价于ht.ObjArr[i].userName                 //alert(ht.ObjArr[i].userName);             }             ht.Remove(1);             alert(ht.Contains(1)); //false             alert(ht.Contains(2)); //true             //alert(ht.GetValue(1)); //异常             var result = ht.GetValue(2);             if (result != null) {                 alert("Employee Id:" + result.id + ";UserName:" + result.userName);             }             ht.Add(2, "这一个key已经存在!"); //Add无效             //ht.Clear(); //清空             alert(ht.Count);         }     

  最后解决一下,开头说的那个问题

        Array.prototype.maxNum = function(){            var arr = this,obj={};            for(var i =0, len=arr.length;i<len;i++){                var key = arr[i];                if( ! obj[key]){                    obj[key] = 1;                }else{                    obj[key]++;                }            }            var max = -1,maxStr;            for( key in obj){                if(obj[key]>max){                    max = obj[key];                    maxStr = key;                }            }            //alert(maxStr);            return [maxStr,max];        }

资料来源:C#中hashtable的赋值、取值、遍历、排序操作

     利用hasOwnProperty实现的高效的Javascript hashtable 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表