欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js實現(xiàn)hashtable的賦值、取值、遍歷操作實例詳解

 更新時間:2016年12月25日 12:05:52   作者:小小平凡世界  
這篇文章主要介紹了js實現(xiàn)hashtable的賦值、取值、遍歷操作,結(jié)合實例形式分析了哈希表的原理、哈希鍵值對操作相關(guān)技巧,需要的朋友可以參考下

本文實例講述了js實現(xiàn)hashtable的賦值、取值、遍歷操作。分享給大家供大家參考,具體如下:

哈希表(Hashtable)這個概率應(yīng)該是#c里面的概念,用來賦值、取值、遍歷、排序操作提高效率。想起這個東西其實使我們以前經(jīng)常遇到這樣的面試題,一個很大的數(shù)組可能有100000個,如何快速知道它里面的出現(xiàn)最多的次數(shù),那么這里我們可能就要用Hashtable的相關(guān)知識了。Javascript中,object的實現(xiàn)就是hash表,因此只要在object上封裝點方法,再利用原生的hasOwnProperty方法就可以實現(xiàn)簡單高效的hashtable。

一、什么是哈希表(Hashtable)

二、哈希表的簡單操作

三、js模擬哈希表的簡單操作

一、什么是哈希表(Hashtable)

Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似key/value的鍵值對,其中key通常可用來快速查找,同時key是區(qū)分大小寫;value用于存儲對應(yīng)于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中對象唯一出現(xiàn)的次數(shù)
    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#語言里面的那樣進(jìn)行操作了。

還一個簡單的變體版:

// js哈希表
function HashTable() {
  this.ObjArr = {};
  this.Count = 0;
  //添加
  this.Add = function(key, value) {
    if (this.ObjArr.hasOwnProperty(key)) {
      return false; //如果鍵已經(jīng)存在,不添加
    }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已經(jīng)存在!"); //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];
}

PS:這里再為大家提供幾款hash操作相關(guān)工具供大家參考使用:

在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript數(shù)學(xué)運算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

最新評論