Reference 如何更改BTreeMap容器中的值

Reference 如何更改BTreeMap容器中的值,reference,rust,Reference,Rust,代码: 因为使用map.iter\u mut()我只能得到参考。如何发送真实值Some(哈哈)但不发送对mut reference值的引用?如果我改为value=&mutsome(Box::new(Haha{data:5}))因为一些(框…将被破坏,所以它将出现另一个错误 由于值是一个可变引用(由于iter\u mut()),只需取消引用它: #[derive(Debug)] struct Haha { data: i32, } use std::collections::BTreeM

代码:


因为使用
map.iter\u mut()
我只能得到参考。如何发送真实值
Some(哈哈)
但不发送对mut reference
值的引用?如果我改为
value=&mutsome(Box::new(Haha{data:5}))因为
一些(框…
将被破坏,所以它将出现另一个错误

由于
是一个可变引用(由于
iter\u mut()
),只需取消引用它:

#[derive(Debug)]
struct Haha {
    data: i32,
}

use std::collections::BTreeMap;

fn main() {
    let mut map: BTreeMap<i8, Option<Box<Haha>>> = BTreeMap::new();
    map.insert(1, Some(Box::new(Haha { data: 3 })));
    map.insert(2, None);

    for (key, value) in map.iter_mut() {
        if value.is_none() {        // if find `None`, change it to a `Some(Haha)`
            value = Some(Box::new(Haha { data: 5 }));
        }
    }
}

而且它会很好地工作。

关于样式的另一个注意事项:宁可省略hashmap的显式类型注释。编译器通常完全能够找出类型;-)另外:我们通常在for循环中直接使用
iter\u mut()
(和
iter()
)来代替for循环。。。在&mut映射{…}
:)谢谢你的建议!第二个是有用的。但首先我编写了
let mut-map:BTreeMap=BTreeMap::new(),但结果是错误:
错误[E0243]:类型参数的数目错误:应为2,找到0
。所以我改写了类型名。。。你能告诉我正确的使用方法吗?只需编写
让mut-map=BTreeMap::new()
;-)明白了~谢谢你对我这样的新手的耐心~:)
*value = Some(Box::new(Haha{data: 5}));