如何使用Data.Doublets的doublets实现类trie-tree的数据结构
关于Data.Doublets引擎实现类前缀树结构的问题
请问有没有人使用过LinksPlatform的Data.Doublets引擎:https://github.com/linksplatform/Data.Doublets
我在尝试存储数据时遇到了问题,现有代码如下:
// 声明links实例 ..... var root = links.Create(); links.Update(root, root, root); // 结构为 (root : root->root) var h_node = links.CreatePoint(); var s_node = links.CreatePoint(); // 我想要实现两个关联: // (root->h) // (root->s) root = links.Update(root, root, h_node); root = links.Update(root, root, s_node); .....
我目前可以创建(root : root->h)形式的单条链接,但不知道怎么实现一个root节点同时关联多个子节点的结构,我发现单个doublet似乎只能指向一个目标,我需要的是root可以链接到集合(root : root->(h, s))。
目前我想到的反向关联方案不符合需求:
(root : root->root) (h : h->root) (s : s->root) ......
我期望的结构如下:
(root : root->root root->h root->s )
可供测试的在线运行地址:https://dotnetfiddle.net/GgYPKU
请问如何调整逻辑才能实现我想要的类trie-tree结构?
解决方法
你对Update方法的用法有误:Update的作用是修改已存在的单个链接的源和目标属性,不是为同一个节点新增关联。你反复修改root对应链接的目标,自然只会保留最后一次设置的s_node关联。
Data.Doublets本身完全支持单个源节点指向多个目标,你不需要改动root本身的自引用结构,只要单独创建多个以root为源的独立链接即可:
// 初始化root节点,保留自引用结构 var root = links.Create(); links.Update(root, root, root); // 创建子节点 var h_node = links.CreatePoint(); var s_node = links.CreatePoint(); // 单独创建多条root的出边链接,不要修改root本身的结构 var rootToH = links.Create(root, h_node); var rootToS = links.Create(root, s_node);
执行后会生成3个有效链接:
- root自引用:
(root: root -> root) - root到h节点的关联:
(rootToH的ID: root -> h_node) - root到s节点的关联:
(rootToS的ID: root -> s_node)
如果需要查询root关联的所有子节点,只要过滤所有Source等于root ID的链接,取对应的Target就能得到你要的(h,s)集合,完全匹配预期结构。
如果要实现多层级的前缀树结构,重复这个逻辑即可:比如要给h节点加子节点,再创建多个以h_node为源的链接就行。
内容的提问来源于stack exchange,提问作者uselessgoddess
相关产品推荐
相关产品推荐

