algorithm - 从 Vec 构建一个 UrlTree
问题描述
我需要制作 url 树结构,如站点地图。输入:Vec - url 列表预期输出:具有嵌套层次结构的 url,从根到端点。
它已经存在板条箱还是我需要自己制作?
输入:
{
"https://exapmle.com",
"https://exapmle.com/aa",
"https://exapmle.com/ab",
"https://exapmle.com/v",
"https://exapmle.com/zac",
"https://exapmle.com/zac/acf",
"https://exapmle.com/zac/acf/adr",
"https://exapmle.com/zac/axx"
}
输出:
UrlTree {
root: "https://exapmle.com",
Nodes: {
{
node: "aa",
Nodes: None,
},
{
node: "ab",
Nodes: None,
},
{
node: "v",
Nodes: None,
},
{
node: "zac",
Nodes: {
{
node: "acf",
Nodes: {
node: "adr",
Nodes: None,
}
},
{
node: "axx",
Nodes: None,
}
}
}
}
}
解决方案
我认为您将不得不自己编写一些代码。虽然您可以使用 Sven Marnach 提到的 radix trie,但您会遇到问题,它可能会在文件夹名称上拆分,而不仅仅是 /。Abc/df 和 abd/df 将保存为 (an, c/df, d/df)。
自己做一些事情,你必须问,你的输入大小有多大,长度或你的 vec,你的代码需要有多高的性能?
如果性能不是那么大的问题,那么就会找到一个 vec 的 struts。在每次插入时,只需检查当前文件夹是否已经在哈希图中并添加或向下一步。构建结构后,将其映射到所需的输出。
如果你需要一些高性能的东西,你可以实现像基数特里一样的东西,这个结构实现起来并不难,因为你只需要关心在“/”上的拆分,你可以以此为灵感https://www.cs.usfca。 edu/~galles/visualization/RadixTree.html。
推荐阅读
- python - 无序列表作为 dict 键
- python - TypeError:serve() 得到了一个意外的关键字参数“document_root”
- javascript - 带有评论系统的 React,socket.io 帖子
- ruby-on-rails - 使用资源定义铁路路线
- php - 如何在 Hacklang 中使用管道附加到 darray
- html - 响应式图像导致文本和图像在小屏幕尺寸下溢出屏幕
- python - Matplotlib:在给定预先计算的计数和 bin 的情况下绘制直方图
- firebase - Firebase 将新用户与 airtable 同步
- excel - Excel - INDEX + MATCH + COUNTIF 函数
- ios - 如何从 rx observable 中获取最后十个元素?