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}));