字典是一種以鍵 -
值 對形式儲存結構的資料結構, 就像**號碼薄裡的名字和**號碼一樣. 要找乙個**時, 先找名字, 名字找到了, 緊挨著它的**號碼也就找到了. 這裡的
鍵 是指你用來查詢的東西,
值 是查詢得到的結果.
js
的object
類就是以字典形式設計的. 本章將使用object
類本身的特性, 實現乙個dictionary
類, 讓這種字典型別的物件使用起來更加簡單. 你也可以只使用陣列和物件來實現本章展示的方法, 但是定義乙個dictionary
類更方便, 也更有意思. 比如, 使用()
引用鍵就比使用簡單. 當然, 還有其他一些便利, 比如可以定義對整體進行操作的方法, 舉個栗子, 顯示字典中所有的元素, 這樣就不必在主程式中迴圈去遍歷字典了.
dictionary
類是基礎是array
類, 而不是object
類. 本章稍後將提到, 我們想對字典中的鍵排序, 而js
中是不能對物件的屬性進行排序的. 但是也不要忘記,js
中一切皆物件, 陣列也是物件.
window.log = console.log.bind(console)
class dictionary
add(key, value)
find(key)
remove(key)
showall() ===>>> $`)})}
};const pbook = new dictionary();
pbook.add('作家1', '書1');
pbook.add('作家2', '書2');
pbook.add('作家3', '書3');
pbook.add('作家4', '書4');
pbook.showall();
log('
')pbook.remove('作家3');
pbook.showall();
add()
方法接受兩個引數: 鍵和值. 鍵是值在字典中索引.
find()
方法以鍵為引數, 返回和其相關聯的值.
remove()
方法用到了js
中的乙個內建函式:delete
.該函式是object
類的一部分, 使用對鍵的引用作為引數. 該函式同時刪掉鍵和與其關聯的值.
showall()
方法顯示字典中所有的鍵值對.
我們還可以定義一些在特定情況下用的輔助方法.
...
count() );
return n;
}clear() );
}...
比如, 要是能知道字典中的元素個數就好了, 那麼就可以定義乙個count()
方法.
這裡你可能就要問了, 既然_datastore
是陣列型別的話為什麼不直接用length
屬性呢? 這是因為當鍵的型別為字串時,length
屬性就不管用了. eg:
const nums = ;
nums[0] = 1;
nums[1] = 2;
log(nums.length); // 2
const book = ;
book['a'] = 1;
book['b'] = 2;
log(book.length); // 0
以及清空字典clear()
. 這裡使用this._datastore =
也是可以的;
字典的主要用途是通過鍵取值, 我們無需太關心資料在字典中的實際儲存順序. 然而, 很多人都希望看到乙個有序的字典. 下面來看看如何讓前面的字典按順序顯示.
陣列是可以排序的, eg:
const a = ;
a[0] = 'm';
a[1] = 'd';
log(a); // m d
a.sort();
log(a); // d m
但是上面的這種做法是對字串作為鍵的字典無效的, 程式會沒有任何輸出. 這和我們前面定義count()
方法時情況一致;
不過這也不是大問題. 使用者關心的是顯示字典的內容時, 結果是有序的. 可使用object.keys()
函式解決這個問題, 重新定義showall()
方法:
showall() ===>>> $`)
})}
和前面的區別是: 拿到_datastore
的鍵後, 呼叫sort()
方法對鍵重新排序. 資料結構 字典
宣告 本文為學習資料結構與演算法分析 第三版 clifford a.shaffer 著的學習筆記,有參考該書的示例 碎碎語 其實我一直對這個資料結構不是很了解。字典 dictionary 作為資料庫的乙個簡單介面,提供在資料庫中儲存 查詢和刪除記錄的可能。字典中有定義關鍵碼 search key 的...
資料結構 字典
字典使用雜湊表作為底層實現,乙個雜湊表裡面可以有多個雜湊表節點,而每個雜湊表節點就儲存了字典中的乙個鍵值對 雜湊表由dict.h dictht結構定義 typedef struct dictht dictht table 是乙個陣列,裡面每個元素都是乙個指向dict.h dictentry結構的指標...
資料結構 字典dict
字典內的元素是由鍵值對組成,每個鍵必須是唯一的。字典具有無序性,故在字典中需要通過鍵來訪問成員。dict1 字典中,鍵是不可變得,與鍵對應的值是可以改變的,可以包含任何其他型別。字典操作 描述dict.copy 複製字典 dict.items 獲取由鍵和值組成的列表list dict.keys 獲取...