天天看點

JS資料結構與算法--字典

1.字典是一種以鍵-值對形式存儲資料的資料結構,(如,電話号碼薄裡面的名字和電話号碼,要找一個電話時,先找名字。),這裡的鍵是指你用來查找的東西,值就是你查找到的結果。

2.Dictionary 類的基礎是Array類,而不是Object類。

開始定義Dictionary 類:

      function Dictionary (){

       this.datastore=new Array();

            }

先定義add()方法,該方法接受兩個參數:鍵和值。鍵是值在字典中的索引,代碼如下:

        function add (key){

              this.datastore[key]=value;

            }

接下來定義find()方法,該方法以鍵作為參數,傳回和其關聯的值。代碼如下:

        function find (key){

              return this.datastore[key];

            }

從字典中删除鍵-值對需要使用delete。該函數同時删除鍵和與其關聯的值。代碼:

            function remove (key){

              delete  this.datastore[key];

            }

最後,顯示字典中所有的鍵-值對:

              function showAll(){

 for(var key in Object.keys(this.database)){

 print(key + "->" + this.datastore[key]);

 }

 }

測試:

var pbook= new Dictionary ();

pbook.add("Mike","123");

pbook.add("David","345");

pbook.add("Cynthia","456");

print(pbook.find("David"));

pbook.remove("David");

pbook.showAll();

2  Dictionary 類的輔助方法

定義字典中的元素個數函數

    function count(){

 var n=0;

 for(var key in Object.keys(this.datastore)){

 ++n;

 }

 return n;

 }

為什麼不用length屬性呢,因為當鍵的類型為字元串時,length屬性就不管用啦。

Clear()是另外一個輔助函數

function clear(key){

 for each(var key in Object.keys(this.datastore)){

 delete  this.datastore[key];

 }

 }

3 為Dictionary類添加排序功能

字典的主要用途是通過鍵取值,我們無須太關心資料在字典中的實際存儲順序,然而,很多人都希望看到一個有序的字典。

隻要重新定義showAll()方法:

function showAll(){

 for(var key in Object.keys(this.database).sort()){

 print(key + "->" + this.datastore[key]);

 }

 }

該定義和之前的唯一差別是:從數組datastore拿到鍵後,調用sort()方法對鍵值重新排序

Dictionary.js

function Dictionary (){

              this.datastore=new Array();

            }

 function add (key){

              this.datastore[key]=value;

            }

 function find (key){

              return this.datastore[key];

            }

 function remove (key){

              delete  this.datastore[key];

            }

 function showAll(){

 for(var key in Object.keys(this.database).sort()){

 print(key + "->" + this.datastore[key]);

 }

 }

 function count(){

 var n=0;

 for(var key in Object.keys(this.datastore)){

 ++n;

 }

 return n;

 }

             function clear(key){

 for each(var key in Object.keys(this.datastore)){

 delete  this.datastore[key];

 }

 }

繼續閱讀