gpt4 book ai didi

rust - 如何让 Rust BTreeMap::get 返回一个字符串?

转载 作者:行者123 更新时间:2023-11-29 08:35:26 25 4
gpt4 key购买 nike

use std::collections::btree_map::BTreeMap;
fn main() {
let mut map: BTreeMap<String, String>;
map.insert("name".to_string(), "aho".to_string());
let name: String = map.get("name");
println!("welcom, {}", name);
}

cargo 构建:

src/main.rs:5:24: 5:39 error: mismatched types:
expected `collections::string::String`,
found `core::option::Option<&collections::string::String>`
(expected struct `collections::string::String`,
found enum `core::option::Option`) [E0308]
src/main.rs:5 let name: String = map.get("name");
^~~~~~~~~~~~~~~
src/main.rs:5:24: 5:39 help: run `rustc --explain E0308` to see a detailed explanation
error: aborting due to previous error
Could not compile `hello_world`.

最佳答案

get()函数返回 Option键入与键对应的值的引用。所以你存储了一个 String在堆上,此函数返回对该 String 的引用基于 key 。

我将您的示例缩短了一些。你有一个未初始化的 BTreeMap , 所以我先初始化它 - let mut map: BTreeMap<String, String> = BTreeMap::new(); .在您的情况下,您可以轻松使用 if let声明。

use std::collections::BTreeMap;

fn main() {
let mut map: BTreeMap<String, String> = BTreeMap::new();
map.insert("name".into(), "aho".into());

if let Some(name) = map.get("name") {
println!("welcome, {}", name);
} else {
println!("welcome, stranger");
}
}

但是如果你真的想返回一个String值,您必须先提取 Some(name) Option 的一部分键入然后使用 clone() 克隆它功能。因为BTreeMap拥有这个String值,如果不克隆它就无法将其移出。 clone()复制原始值。

use std::collections::BTreeMap;

fn main() {
let mut map: BTreeMap<String, String> = BTreeMap::new();
map.insert("name".into(), "aho".into());

if let Some(name) = map.get("name") {
let name: String = name.clone();
println!("welcome, {}", name);
} else {
println!("welcome, stranger");
}
}

关于rust - 如何让 Rust BTreeMap::get 返回一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36244068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com