我正在努力寻找一种优雅的TO解决方案,以便在Ruust中访问用于只读目的的嵌套 map .我遇到了这种情况,理想情况下,我可以返回对空映射的引用(这当然不起作用,因为空哈希映射归函数所有):
struct S {
stuff: HashMap<A, HashMap<B, C>>
}
impl S {
fn get(&self, a: &A) -> &HashMap<B,C> {
return self.stuff.get(a).unwrap_or(&HashMap::new());
}
}
不能保证 map 的东西会有关键字a,因此处理可选性是必须的.
我希望解决方案来实现方法得到这个或类似的签名以一种有效的方式(没有副本/移动),因为 map 的东西可能是相当大的.
我只能想到以下解决方案,但我在想,肯定有更直接的解决方案:
- 在 struct S中添加一个私有字段,它只是一个空的HashMap,这样我就可以返回的引用.这似乎是一个糟糕的懒惰解决方案.
- 调用Entry(A).INSERT_WITH(||HashMap::New()),但这需要不必要的可变性.
- 退货选项<;&;HashMap>;
在我看来,解决方案(3)是实现上述目标的最好方法,但也许我错过了一些东西,有更直接的方法吗?