在Rust中定义无限嵌套HashMap



我试图在Rust中表示一个文件目录结构,我这样做的方式是通过嵌套的hashmap。我的想法是有一个看起来像这样的类型:

HashMap<&'a str, HashMap<&'a str, HashMap<&'a str, ...>>>

但是在Rust中是不可能输入的。我需要将HashMap包装在一个结构体中,以便能够键入:

struct Node<'a> {
children: HashMap<&'a str, Rc<Node<'a>>>,
}

然而,创建一个包含单个字段的结构对我来说似乎是浪费。有没有办法实现第一个例子,而不创建一个结构?

没有。Rust不支持无限递归泛型。

newtype(单字段结构)方法并不浪费,实际上是Rust惯用的方法。你可能习惯了在其他语言中,每一层嵌套都会创建一个间接层和一个新的堆分配,但Rust不是这样工作的;Node<'a>的大小和HashMap<&'a str, Rc<Node<'a>>>的大小是相同的,因为结构体直接包含它们的字段。

我唯一的建议是考虑您是否真的在这个结构中需要引用计数。如果没有,您可以完全删除Rc层,这将有效地为您提供与假设的无限递归类型具有相同概念内存布局的类型。

相关内容

  • 没有找到相关文章

最新更新