从 rust 函数返回 &HashMap

问题描述 投票:0回答:0

我正在努力寻找一种优雅的解决方案来访问 Rust 中的嵌套映射以实现只读目的。我有这种情况,理想情况下,作为示例,我可以返回对空映射的引用(这当然不起作用,因为空哈希映射由函数拥有):

struct S {
    stuff: HashMap<A, HashMap<B, C>>
}

impl S {
    get(&self, a: &A) -> &HashMap<B,C> {
        return self.stuff.get(a).unwrap_or(&HashMap::new());
    }
}

无法保证地图内容将具有键 a,因此必须处理可选性。

我希望解决方案能够以有效的方式(无副本/移动)实现具有此或类似签名的方法 get ,因为地图内容可能相当大。

我只能想到以下解决方案,但我想一定有一个更简单的解决方案:

  1. 在 struct S 中添加一个私有字段,它只是一个空的 HashMap,以便我可以返回 的引用。这似乎是一个糟糕的懒惰解决方案。
  2. 调用entry(a).insert_with(|| HashMap::new()),但这需要不必要的可变性。
  3. 退货选项<&HashMap>

在我看来,解决方案(3)是实现上述目标的最佳方法,但也许我遗漏了一些东西,并且有更直接的方法?

rust hashmap ownership
© www.soinside.com 2019 - 2024. All rights reserved.