gpt4 book ai didi

rust - 如何在 HashMap 中找到某个值的键?

转载 作者:行者123 更新时间:2023-12-03 11:24:20 26 4
gpt4 key购买 nike

我有一个 std::collections::HashMap包含一些条目。我想找到与哈希映射中已经存在的特定值对应的键。

最佳答案

迭代 HashMap 的条目,找到与值匹配的条目,并映射到键。

use std::collections::HashMap;

fn find_key_for_value<'a>(map: &'a HashMap<i32, &'static str>, value: &str) -> Option<&'a i32> {
map.iter()
.find_map(|(key, &val)| if val == value { Some(key) } else { None })
}

fn main() {
let mut map = HashMap::new();
map.insert(1, "a");
map.insert(2, "b");
map.insert(3, "c");

assert_eq!(find_key_for_value(&map, "a"), Some(&1));
assert_eq!(find_key_for_value(&map, "z"), None);
}

注意这里只会找到第一个匹配的值,如果你想找到所有匹配的值,可以使用 filter_map并将它们收集到 Vec :

use std::collections::HashMap;

fn find_keys_for_value<'a>(map: &'a HashMap<i32, &'static str>, value: &str) -> Vec<&'a i32> {
map.iter()
.filter_map(|(key, &val)| if val == value { Some(key) } else { None })
.collect()
}

fn main() {
let mut map = HashMap::new();
map.insert(1, "a");
map.insert(2, "b");
map.insert(3, "c");
map.insert(4, "a");

let mut keys = find_keys_for_value(&map, "a");
keys.sort();
assert_eq!(keys, vec![&1, &4]);
}

关于rust - 如何在 HashMap 中找到某个值的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401720/

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