栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Json数据格式实现单词树大数据快速查询

Json数据格式实现单词树大数据快速查询

Json数据格式实现单词树大数据快速查询

原文地址

思路:空间换时间,树本身可以方便储存和读取,快速查询
优势:

    json格式的树可以快速在字符串和json格式之间转换通过对象名直接访问子元素跳过遍历子元素,速度极快,经过测试比对象树至少快三倍代码量极少,区区不到100行树本身占用控件较小
脚本JsonTree.ts

import { _decorator,warn } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('JsonTree')
export class JsonTree {

    private static _instance: JsonTree = null;
    static get instance() {
        if (this._instance == null) this._instance = new JsonTree();
        return this._instance;
    }

    
    jsonArrToJsonTree(json: Object | any[]): Object {
        let outJsonTree: Object = {};
        let reg = /^[A-Za-z]+$/;
        for (const key in json) {
            let wordStr: string = json[key];
            if (reg.test(wordStr)) {
                this.addWordToTree(outJsonTree, wordStr.toLocaleLowerCase(), "1");
            } else {
                warn("单词不是纯字母:", wordStr);
            }
        }
        return outJsonTree;
    }

     
    addWordToTree(treeObj: Object, word: string, value: any) {
        let lastObj: Object = treeObj;
        for (let index = 0; index < word.length; index++) {
            if (!(word[index] in lastObj)) lastObj[word[index]] = {};//如果没有指定键,创建并置空
            if (index == word.length - 1) { lastObj[word[index]]["_v"] = value; break; }//如果是单词结尾,填入值
            lastObj = lastObj[word[index]];//如果单词未结束,更新当前对象到下一级
        }
    }

    
    subWordToTree(treeObj: Object, word: string): boolean {
        let lastObj: Object = treeObj;
        for (let index = 0; index < word.length; index++) {
            if (!lastObj[word[index]]) {//如果没有目标键,移除失败
                return false;
            }
            lastObj = lastObj[word[index]];
        }
        delete lastObj["_v"];
        this.subWordPathToTree(treeObj, word);
        return true;
    }

    
    private subWordPathToTree(treeObj: Object, word: string) {
        for (let index = 0; index < word.length; index++) {
            let lastObj: Object = treeObj;
            for (let index = 0; index < word.length; index++) {
                if (!lastObj[word[index]]) break;
                if (JSON.stringify(lastObj[word[index]]) == "{}") { delete lastObj[word[index]]; break }
                lastObj = lastObj[word[index]];
            }
        }
    }

    
    findWordIsInTree(treeObj: Object, word: string): boolean {
        let lastObj: Object = treeObj;
        for (let index = 0; index < word.length; index++) {
            if (!lastObj[word[index]]) {//如果没有目标键,则未存入单词
                return false;
            }
            lastObj = lastObj[word[index]];
        }

        return !!lastObj["_v"];
    }
}


使用样例
//样例
let jsonObj:Object = [and,about,some,any,add,apple];//单词库
let outTree: Object = JsonTree.instance.jsonArrToJsonTree(jsonObj);//初始化json树
log(“outTree”, outTree);

log(“查询:”,JsonTree.instance.findWordIsInTree(outTree, “about”));

log(“删除:”,JsonTree.instance.subWordToTree(outTree, “about”));

log(“查询:”,JsonTree.instance.findWordIsInTree(outTree, “about”));
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/707934.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号