如何在 Rust 编程语言最内层结构中存在的无序映射中插入键值对?

How can I insert a key-value pair in an unordered map that is present in the innermost struct in rust programming language?

这是我的数据模型:

pub struct RaffleDetails {
    prize: Balance,
    start: Timestamp,
    end: Timestamp,
    participants: UnorderedMap<AccountId, Balance>,
}


pub struct RaffleDapp {
    raffles: UnorderedMap<AccountId, RaffleDetails>,
}

如何在 'participants' 变量中插入键值对?

我试过self.raffles.get(&raffle_account_id).unwrap().participants.insert(&env::predecessor_account_id(), &confidence);但它不持久。

参考资料: UnorderedMap NEAR Rust SDK

您需要确保更新地图中的 RaffleDetails 实例,而不是它的 copy/clone。

我不熟悉 UnorderedMap,但在我看来 get() 方法 returns 一个 copy 的值 地图中,因此您只更新复制的值。我不知道 UnorderedMap 是否允许您直接改变其中的值(浏览文档,我没有看到这样的方法)。不过,您可以做的是 re-insert 修改后的 RaffleDetailsraffles 地图中(以便 将旧地图替换 修改后的地图)。

我说的是这样的(我还没有测试编译它):

let o = self.raffles.get(&raffle_account_id);
if let copied_rd = Some(o) {
    copied_rd.participants.insert(&env::predecessor_account_id(), &confidence);
    self.raffles.insert(&raffle_account_id, &copied_rd);
}