美文网首页
数据结构——字典

数据结构——字典

作者: 柏丘君 | 来源:发表于2018-02-16 22:41 被阅读0次

    上篇文章介绍了集合的实现,本文介绍字典。字典和集合十分类似,集合中保存的是一系列值,而字典中保存的是键值对。字典也叫映射,在 ES6 中也有原生的支持:Map
    在上篇集合的实现中,MySet 类实际上也可以看作一个字典类,因为在调用 add() 方法添加元素时,会向 dataStore 属性上添加键和值,因此也可以将其看作一个字典。
    采用 JavaScript 对象为基础实现集合主要是基于集合的无序性考虑,数组是有序的,因此不适合用来实现集合。使用 JavaScript 对象实现的 MySet 类,需要保存键值,和字典有点相似。不同点在于,实现 MySet 类时,会在内部隐式的计算出一个键,而在实现字典时,需要显式的指定键,这是它们在实现上的一个区别。

    字典的代码实现

    下面是字典的代码实现,首先定义 IDict 接口:

    interface IDict<T>{
        // 添加元素
        add(key:string,val:T):void;
        // 移除元素
        remove(key:string):T;
        // 判断是否存在
        has(key:string):boolean;
        // 根据键获取值
        get(key:string):T;
        // 清空字典
        clear():void;
        // 获取字典的长度
        size():number;
        // 获取所有的键
        keys():string[];
        // 获取所有的值
        values():T[];
    }
    

    实现接口,定义 Dict 类:

    class Dict<T> implements IDict<T>{
        private dataStore:{
            [propNames:string]:T
        } = {};
        private _size:number = 0;
        add(key:string,val:T):void{
            if(!this.has(key)){
                this.dataStore[key] = val;
                this._size++;
            }
        }
        remove(key:string):T{
            const res:T = this.dataStore[key];
            delete this.dataStore[key];
            this._size--;
            return res;
        }
        has(key:string):boolean{
            return this.dataStore.hasOwnProperty(key);
        }
        get(key:string):T{
            return this.dataStore[key]
        }
        clear():void{
            this.dataStore = {};
        }
        size():number{
            return this._size;
        }
        keys():string[]{
            return Object.keys(this.dataStore);
        }
        values():T[]{
            const tmp:T[] = [];
            Object.keys(this.dataStore).forEach(v => {
                tmp.push(this.dataStore[v])
            })
            return tmp;
        }
    }
    

    完。

    相关文章

      网友评论

          本文标题:数据结构——字典

          本文链接:https://www.haomeiwen.com/subject/isoptftx.html