V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
goinghugh
V2EX  ›  算法

求助一个算法题,将 a.b.c=10 的格式转换为 map 结构

  •  
  •   goinghugh · 2020-03-23 20:24:53 +08:00 · 1683 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    将 a.b.c 的格式转换为 map 结构.

    输入:

    a.b.c=10
    a.b.d=20
    a.e.f.z=30
    

    输出:

    {
        "a": {
            "b": {
                "c": 10,
                "d": 20
            },
            "e": {
                "f": {
                    "z": 30
                }
            }
        }
    }
    

    工作中遇到的一个问题,上述是屏蔽掉业务后的问题。 有没有比较好的实现方式?不用详细代码,能给出个相关的算法关键字或者思路就行,谢谢各位!

    7 条回复    2020-03-23 21:07:18 +08:00
    qq316107934
        1
    qq316107934  
       2020-03-23 20:28:21 +08:00
    不说下语言? JS 可以直接实现吧
    goinghugh
        2
    goinghugh  
    OP
       2020-03-23 20:31:25 +08:00
    @qq316107934 JS 如何实现?我比较熟的是 Java
    fishCatcher
        3
    fishCatcher  
       2020-03-23 20:41:00 +08:00 via iPhone
    trie 树?每一层是一个大括号
    fishCatcher
        4
    fishCatcher  
       2020-03-23 20:42:34 +08:00 via iPhone
    @fishCatcher 准确的来说不用 trie 树吧,普通的树就可以
    jmc891205
        5
    jmc891205  
       2020-03-23 20:55:29 +08:00
    反射 + 递归?
    goinghugh
        6
    goinghugh  
    OP
       2020-03-23 20:56:11 +08:00
    @fishCatcher 额,普通的树可以。。感谢,绕到二维数组之类的了。。
    qq316107934
        7
    qq316107934  
       2020-03-23 21:07:18 +08:00
    ```javascript
    function getJSONFromExp(exp){
    let m = {}
    let t = m
    s = exp.split(".")
    s.slice(0,-1).reduce((tmp,item) => {
    if (!t[item]){
    t[item] = {}
    }
    t = t[item]
    },t)
    last = s.pop().split("=")
    t[last[0]] = last[1]
    return m
    }

    console.log(getJSONFromExp("a.e.f.z=30"))
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3168 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:44 · PVG 21:44 · LAX 05:44 · JFK 08:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.