gpt4 book ai didi

get - 在 Rust HashMap 中返回精确值

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

我找不到合适的方法来返回 Rust 中 HashMap 中键的确切值。所有现有的 get 方法都以不同的格式而不是确切的格式返回。

最佳答案

您可能需要 HashMap::remove method - 它从映射中删除键并返回原始值而不是引用:

use std::collections::HashMap;

struct Thing {
content: String,
}

fn main() {
let mut hm: HashMap<u32, Thing> = HashMap::new();
hm.insert(
123,
Thing {
content: "abc".into(),
},
);
hm.insert(
432,
Thing {
content: "def".into(),
},
);

// Remove object from map, and take ownership of it
let value = hm.remove(&432);

if let Some(v) = value {
println!("Took ownership of Thing with content {:?}", v.content);
};
}

get 方法必须返回对象的引用,因为原始对象只能存在于一个地方(它属于HashMap)。 remove 方法可以返回原始对象(即“取得所有权”),只是因为它将对象从其原始所有者那里移除。

另一种解决方案,视具体情况而定,可能是获取引用,在其上调用.clone() 来制作对象的新副本(在这种情况下它不起作用因为 Clone 没有为我们的 Thing 示例对象实现 - 但如果值方式,比如 String)

最后可能值得注意的是,在许多情况下您仍然可以使用对对象的引用 - 例如,前面的示例可以通过获取引用来完成:

use std::collections::HashMap;

struct Thing {
content: String,
}

fn main() {
let mut hm: HashMap<u32, Thing> = HashMap::new();
hm.insert(
123,
Thing {
content: "abc".into(),
},
);
hm.insert(
432,
Thing {
content: "def".into(),
},
);

let value = hm.get(&432); // Get reference to the Thing containing "def" instead of removing it from the map and taking ownership

// Print the `content` as in previous example.
if let Some(v) = value {
println!("Showing content of referenced Thing: {:?}", v.content);
}
}

关于get - 在 Rust HashMap 中返回精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43416196/

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