• 使用javaScript实现一个字典


    //因为每个键和每个键值对都设置为字符串类型,这样方便检索,所以需要写一个函数用来进行字符串转换
    function defaultToString(item){
        if(item == 'null'){
            return 'null';
        }
        if(item == 'undefined'){
            return 'undefined';
        }
        if(typeof item || item instanceof String){
            return `${item}`;
        }
        return item.toString();
    }
    //新建一个键值对的类
    class valuePair{
        constructor(key, value){
            this.key = key;
            this.value = value;
        }
        toString(){
            return `[#${this.key}:${this.value}]`;
        }
    }
    //新建一个字典类
    class Dictionary{
        constructor(toStrFn = defaultToString){
            this.toStrFn = toStrFn;
            this.table = {};
        }
        //判断键是否存在的方法
        hasKey(key){
            return this.table[this.toStrFn(key)] != null;
        }
        //给字典添加键和键对应的键值对的方法
        set(key,value){
            const tableKey = this.toStrFn(key);
            this.table[tableKey] = new valuePair(key,value);
        }
        //根据键来获取键对应的值的方法
        get(key){
            const valuePair = this.table[this.toStrFn(key)];
            return valuePair== null?undefined:valuePair.value;
        }
        //获取当前字典的长度的方法
        size(){
            return Object.keys(this.table).length;
        }
        //判断当前字典是否为空
        isEmpty(){
            return this.size() == 0;
        }
        //获取当前字典的所有键值对
        keyValues(){
            let valuePair = [];
            for(let k in this.table){
                valuePair.push(this.table[this.toStrFn(k)]);
            }
            return valuePair;
        }
        //获取当前字典的所有键
        keys(){
            return this.keyValues().map(valuePair => valuePair.key);  
        }
        //获取当前字典的所有值
        values(){
            return this.keyValues().map(valuePair => valuePair.value);
        }
        //遍历当前字典的键值对
        forEach(callBackFn){
            let valuePairs = this.keyValues();
            for(let i = 0; i < valuePairs.length; i++){
               const result =  callBackFn(valuePairs[i].key,valuePairs[i].value);
               if(result == false){
                   break;
               }
            }
        }
        //将键值对以字符串形式打印出来
        toString(){
            if(this.isEmpty()){
                return '';
            }
            let objString = `${this.keyValues()[0].toString()}`;
            let valuePairs = this.keyValues();
            for(let i = 1; i < this.size(); i++){
                objString = `${objString},${valuePairs[i].toString()}`//调用valuePair类中的toString方法
            }
            return objString;
        }
        remove(key){
            if(this.hasKey(key)){
                delete this.table[this.toStrFn(key)];
                return true;
            }
            return false;
        }
    }
  • 相关阅读:
    Maven中配置生成单元测试报告配置
    maven-surefire-plugin总结
    Java程序内存分析:使用mat工具分析内存占用
    利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
    JVM性能监控工具(一)-jdk命令行工具
    Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈
    JDK自带内存及线程分析工具
    使用jstack和TDA进行java线程dump分析
    qt 插件开发
    精通linux设备驱动开发 笔记
  • 原文地址:https://www.cnblogs.com/MySweetheart/p/13229035.html
Copyright © 2020-2023  润新知