diff --git a/src/basic/collections/hashmap.md b/src/basic/collections/hashmap.md index 6e2afc46..f1548e66 100644 --- a/src/basic/collections/hashmap.md +++ b/src/basic/collections/hashmap.md @@ -74,7 +74,7 @@ fn main() { ]; let teams_map: HashMap<_,_> = teams_list.into_iter().collect(); - + println!("{:?}",teams_map) } ``` @@ -91,6 +91,7 @@ error[E0282]: type annotations needed // 需要类型标注 | ^^^^^^^^^ consider giving `teams_map` a type // 给予 `teams_map` 一个具体的类型 ``` + ## 所有权转移 `HashMap` 的所有权规则与其它 Rust 类型没有区别: @@ -186,6 +187,15 @@ let score: Option<&i32> = scores.get(&team_name); - `get` 方法返回一个 `Option<&i32>` 类型:当查询不到时,会返回一个 `None`,查询到时返回 `Some(&i32)` - `&i32` 是对 `HashMap` 中值的借用,如果不使用借用,可能会发生所有权的转移 +还可以继续拓展下,上面的代码中,如果我们想直接获得值类型的 `score` 该怎么办,答案简约但不简单: + +```rust +let score: i32 = scores.get(&team_name).copied().unwrap_or(0); +``` + +这里留给大家一个小作业: 去官方文档中查询下 `Option` 的 `copied` 方法和 `unwrap_or` 方法的含义及该如何使用。 + + 还可以通过循环的方式依次遍历 `KV` 对: ```rust