【发布时间】:2023-03-29 02:14:01
【问题描述】:
我正在尝试在 JavaScript 中实现 trie 的变体。基本上,它是一个高效的数据存储对象,其中键中的字符不重复。换句话说,如果我有键“abe”和“ann”,则应该只出现一个共享字母“a”的实例:
{
a: {
b: {
e: {
0: 'lincoln'
}
},
n: {
n: {
0: 'mcgee'
}
}
}
}
这是所需的实现和一些使用示例:
function Trie () {
// The top level of the trie.
var root = {};
return {
write: function (key, value) {
},
read: function (key) {
}
};
}
// Sample usage
var trie = new Trie();
trie.write('abe', 'lincoln');
trie.write('ann', 'mcgee');
trie.read('abe'); // returns 'lincoln'
trie.read('ann'); // returns 'mcgee'
我遇到了write 方法的阻止程序。给定一个字符串键,例如“abe”,我需要将一个属性分配给root['a']['b']['e']。当键的数量和键的值未知时,我无法找到一种方法来为对象属性赋值几层。
我认为唯一能想到的解决方案是一个糟糕的解决方案:将值的路径放入字符串并使用eval。例如:eval("root['a']['b']['e'] = 'lincoln'");
有没有更好的动态分配值的解决方案? (我意识到这是一个有点复杂的问题,所以我很高兴通过提供额外的信息来澄清。)
【问题讨论】:
-
这只是读/写中的一个循环操作,用于在键中的每个字母之后将树遍历到末尾。如果未找到字母,则为该字母在树中创建一个新分支。
标签: javascript trie