我想创建一个带有嵌套结构的HashMap
,例如这个错综复杂的例子:
{
type: boy
name: Phineas
father:
type: man
name: Lawrence
}
在Rust中,这将是:
use std::collections::HashMap;
let mut lawrence = HashMap::new();
lawrence.insert("type", "man");
lawrence.insert("name", "Lawrence");
let mut phineas = HashMap::new();
phineas.insert("type", "boy");
phineas.insert("name", "Phineas");
phineas.insert("father", lawrence);
但HashMap
值只能是字符串,似乎;如果我尝试编译我得到:
expected &str, found struct `std::collections::HashMap`
我检查了文档,但找不到构建类似数据结构的简单解决方案。
答案 0 :(得分:4)
我假设你来自动态类型的语言。在这种情况下,你真的需要通读Rust Book,因为Rust是非常不同的野兽。 Rust是静态类型的,所以你在这里尝试做的几乎不会起作用,绝对不是你打算如何使用这种语言。
在这种特殊情况下,没有简单的答案,因为我不知道你的目标是什么。 Rust中的数据结构建模是通过struct
s,enum
s,Vec
和HashMap
等集合,Option
等实用程序类型以及各种指针类型,例如Box
,Rc
,等。您需要的具体组合取决于您尝试表示的内容,打算如何构建它,以及你打算如何使用它。
一个可能的配方将是:
struct Person {
kind: PersonKind,
name: String,
father: Option<Box<Person>>,
}
enum PersonKind {
Boy,
Man,
}
答案 1 :(得分:0)
HashMap
是通用的。当您第一次插入时,编译器确定类型,并且不允许您使用其他类型。
pub struct HashMap<K, V, S = RandomState> { /* fields omitted */ }
pub fn insert(&mut self, k: K, v: V) -> Option<V>
V
是您的值的类型,K
是键的类型。由于Rust具有静态类型系统,因此必须考虑这一点。