摘要:一構(gòu)造字典數(shù)據(jù)結(jié)構(gòu)我們將使用實(shí)現(xiàn)字典結(jié)構(gòu),各部分功能使用注釋說(shuō)明。參考資料數(shù)據(jù)結(jié)構(gòu)與算法描述第章字典由于書(shū)上的源代碼出現(xiàn)了錯(cuò)誤,因此代碼根據(jù)實(shí)際運(yùn)行結(jié)果做了相應(yīng)修改。
前言
字典是一種以鍵-值對(duì)形式存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),如同手機(jī)通訊錄中,想要尋找一個(gè)電話(huà)時(shí),只要找到名字就可以找到其電話(huà)號(hào)碼。
JavaScript的Object類(lèi)就是以字典的形式設(shè)計(jì)的。這里將使用Object類(lèi)的特性,實(shí)現(xiàn)一個(gè)Dictionary類(lèi),讓字典類(lèi)型的對(duì)象使用起來(lái)更加簡(jiǎn)單。
我們將使用JavaScript實(shí)現(xiàn)字典結(jié)構(gòu),各部分功能使用注釋說(shuō)明。
/** * Dictionary 構(gòu)造方法 * datastore 存儲(chǔ)數(shù)據(jù) */ function Dictionary () { this.datastore = new Array() this.add = add this.find = find this.remove = remove this.showAll = showAll this.count = count this.clear = clear this.showAllBySort = showAllBySort } /** * add() 方法進(jìn)行添加數(shù)據(jù) * @param {*} key * @param {*} value */ function add (key, value) { this.datastore[key] = value } /** * find() 方法進(jìn)行查找key值對(duì)應(yīng)的value * @param {*} key */ function find (key) { return this.datastore[key] } /** * remove() 方法進(jìn)行刪除對(duì)應(yīng)的key值鍵值對(duì) * @param {*} key */ function remove(key) { delete this.datastore[key] } /** * showAll() 方法進(jìn)行遍歷顯示所有的key、value */ function showAll () { let datakeys = Array.prototype.slice.call(Object.keys(this.datastore)) for (let key in datakeys) { console.log(datakeys[key] + " -> " + this.datastore[datakeys[key]]) } } /** * showAllBySort() 方法進(jìn)行遍歷顯示所有排序后的key、value */ function showAllBySort () { let datakeys = Array.prototype.slice.call(Object.keys(this.datastore)).sort() for (let key in datakeys) { console.log(datakeys[key] + " -> " + this.datastore[datakeys[key]]) } }
其中有幾點(diǎn)個(gè)人認(rèn)為需要強(qiáng)調(diào):
我們想要?jiǎng)h除鍵-值對(duì)時(shí)需要使用JavaScript中的內(nèi)置函數(shù)——delete。該函數(shù)使用對(duì)鍵的引用作為參數(shù),同時(shí)刪除鍵與其關(guān)聯(lián)的值。
我們使用Object類(lèi)的keys()方法可以返回傳入?yún)?shù)中存儲(chǔ)的所有鍵。(Object.keys()與for...in循環(huán)的區(qū)別主要在于for...in循環(huán)會(huì)枚舉其原型鏈上的屬性)
slice()方法是從已有的數(shù)組中返回選定的元素
當(dāng)我們?cè)谟?jì)算字典中元素的個(gè)數(shù)時(shí),并沒(méi)有直接使用length方法,因?yàn)楫?dāng)鍵的類(lèi)型為字符串時(shí),length屬性無(wú)法使用
結(jié)束語(yǔ)使用JavaScript實(shí)現(xiàn)字典數(shù)據(jù)結(jié)構(gòu)相對(duì)來(lái)說(shuō)難度不大,但我們需要注意其中的一些細(xì)節(jié)部分。
參考資料:數(shù)據(jù)結(jié)構(gòu)與算法JavaScript描述 第7章 字典
由于書(shū)上的源代碼出現(xiàn)了錯(cuò)誤,因此代碼根據(jù)實(shí)際運(yùn)行結(jié)果做了相應(yīng)修改。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107986.html
摘要:元組是靜態(tài)數(shù)組,它們不可變,且其內(nèi)部數(shù)據(jù)一旦創(chuàng)建便無(wú)法改變。元組緩存于運(yùn)行時(shí)環(huán)境,這意味著我們每次使用元組時(shí)無(wú)須訪(fǎng)問(wèn)內(nèi)核去分配內(nèi)存。 以下是整理的JavaScript和python的基礎(chǔ)區(qū)別的整理: 字符串、列表、元組、字典、集合、函數(shù) 字符串 聲明一個(gè)字符串 python str = 123 str = 123 Tips: 如果是三個(gè)引號(hào)的話(huà),那么在py中就是注釋的意思 ...
摘要:元組是靜態(tài)數(shù)組,它們不可變,且其內(nèi)部數(shù)據(jù)一旦創(chuàng)建便無(wú)法改變。元組緩存于運(yùn)行時(shí)環(huán)境,這意味著我們每次使用元組時(shí)無(wú)須訪(fǎng)問(wèn)內(nèi)核去分配內(nèi)存。 以下是整理的JavaScript和python的基礎(chǔ)區(qū)別的整理: 字符串、列表、元組、字典、集合、函數(shù) 字符串 聲明一個(gè)字符串 python str = 123 str = 123 Tips: 如果是三個(gè)引號(hào)的話(huà),那么在py中就是注釋的意思 ...
摘要:下列將筆者涉獵到的與前端相關(guān)的數(shù)據(jù)結(jié)構(gòu)案例作如下總結(jié)數(shù)據(jù)結(jié)構(gòu)案例棧其它數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),中間件機(jī)制隊(duì)列其它數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)鏈表中的的優(yōu)化集合對(duì)應(yīng)中的字典對(duì)應(yīng)中的哈希表一種特殊的字典,可以用來(lái)存儲(chǔ)加密數(shù)據(jù)樹(shù)圖暫時(shí)沒(méi)遇到,不過(guò)里面的蠻常見(jiàn) showImg(https://segmentfault.com/img/remote/1460000016060996?w=640&h=280); 常見(jiàn)數(shù)...
摘要:大學(xué),光學(xué)工程研究生畢業(yè),和程序猿完全不搭邊。那怎么辦,試著學(xué)一學(xué)唄,學(xué)習(xí)才是程序猿的天性。所以我在想程序猿是不是都需要新知識(shí)刺激一下,才能保持興奮的頭腦。有句話(huà)說(shuō)的很對(duì)程序猿就像好奇的貓,追著毛球的線(xiàn)頭玩,最后一個(gè)毛球在腦袋里攪漿糊。 說(shuō)說(shuō)我自己的經(jīng)歷。211大學(xué),光學(xué)工程研究生畢業(yè),和程序猿完全不搭邊。 畢業(yè)后進(jìn)了成都某國(guó)字頭研究所,在行業(yè)里摸爬滾打了四年,2018年機(jī)緣巧合在家養(yǎng)...
閱讀 2769·2023-04-26 00:42
閱讀 2899·2021-09-24 10:34
閱讀 3928·2021-09-24 09:48
閱讀 4261·2021-09-03 10:28
閱讀 2669·2019-08-30 15:56
閱讀 2848·2019-08-30 15:55
閱讀 3340·2019-08-29 12:46
閱讀 2315·2019-08-28 17:52