js版數據結構_06 字典

js版數據結構_06 字典

本篇博客知識點:

  • 什麼是字典
  • 相關方法的實現

1. 什麼是字典

上一篇博客我們總結了集合,知道集合就是存放了一組互不重複的元素。字典和它相差不多,只不過集合裏面只是保存了值,而在這裏是以鍵值對的方式保存的

與集合的實現相同,這裏我們還是使用對象作爲字典結構的數據容器。

創建字典類:

class Dictionary {
            constructor() {
                    this.table = {};
                }
                }

要實現的相關方法:

  • set(key,value):向字典中添加新元素。如果 key 已經存在,那麼已存在的 value 會
    被新的值覆蓋
  • remove(key):通過使用鍵作爲參數來從字典中移除鍵值對應的數據值。
  • hasKey(key):如果某個鍵值存在於該字典中,返回 true,否則返回 false。
  • get(key):通過以鍵值作爲參數查找特定的數值並返回。
  • clear():刪除該字典中的所有值。
  • isEmpty():在 size 等於零的時候返回 true,否則返回 false。
  • keys():將字典所包含的所有鍵名以數組形式返回。
  • values():將字典所包含的所有數值以數組形式返回。
  • keyValues():將字典中所有[鍵,值]對返回。
  • forEach(callbackFn):迭代字典中所有的鍵值對。 callbackFn 有兩個參數: key 和
    value。

2.相關方法的實現

ps:下面爲了保證輸入的鍵爲字符串,爲方便使用了空字符串的拼接

hasKey(key)

                // 判該字典中是否有該鍵
            hasKey(key) {
                    return this.table[key + ""] != null;
                }

set(key, val)

                 // 加入或重置鍵值對
            set(key, val) {
                    if (key != null && val != null) {
                        this.table[key + ""] = val;
                        return true;
                    } else {
                        return false;
                    }
                } 

remove(key)

                 // 刪除鍵值對
            remove(key) {
                    if (this.hasKey(key + "")) {
                        delete this.table[key + ""];
                        return true;
                    } else {
                        return false;
                    }
                } 

get(key)

            get(key) {
                    if (this.hasKey(key + "")) {
                        return this.table[key + ""];
                    } else {
                        return undefined;
                    }
                }

keyValues()

 // 返回字典中的所有value
            keyValues() {
                    return Object.values(this.table);
                }

keys()

   // 返回字典中的所有key
      keys() {
                return Object.keys(this.table);
            }

size()

            size() {
                return Object.keys(this.table).length;
            }

isEmpty()

            isEmpty() {
                return this.size() === 0;
            }

clear()

            clear() {
                this.table = {};
            }

forEach(callback)

            forEach(callback) {
                const key = this.keys();
                for (let i = 0; i < key.length; i++) {
                    let res = callback(key[i], this.table[key[i]]);
                    if (res === false) {
                        break;
                    }
                }
            }

部分測試代碼:

        let dic = new Dictionary();
        dic.set(1, "a");
        dic.set(2, "b");
        dic.set(3, "c");
        dic.set(4, "d");
        dic.set(5, "e");
        console.log(dic.hasKey(1));
        dic.remove(2);
        console.log(dic.get(3));
        console.log(dic.keyValues());
        console.log(dic.keys());
        dic.forEach((key, val) => {
            console.log(`key:${key} val:${val}`);

        })

結果圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章