如何在Rust中遍历字符串并在HashMap中逐个查找字符对应值
Rust实现字符到值的映射查找
首先修正代码里的拼写错误:Hashmap应为HashMap(Rust对大小写敏感)。
要实现和Python等价的功能,你可以借助Rust的迭代器特性,通过map处理每个字符的查找逻辑,再用collect把结果收集成Vec<u32>(对应Python的列表):
use std::collections::HashMap; fn main() { // 修正HashMap的拼写错误 let lookup: HashMap<char, u32> = HashMap::from([ ('J', 5), ('H', 17), ('4', 12) ]); let s = String::from("JH4"); // 遍历字符、查找映射并收集结果 let looked_up: Vec<u32> = s.chars() .map(|c| lookup.get(&c).unwrap()) // 查找字符,unwrap取出值(假设所有字符都在映射中) .copied() // 将&u32转换为u32,利用Copy trait实现复制 .collect(); println!("{:?}", looked_up); // 输出 [5, 17, 12] }
关键细节说明:
lookup.get(&c):HashMap的get方法接收引用类型的键,因此需要传入&c;该方法返回Option<&u32>,表示查找结果可能存在或不存在。unwrap():由于你确定目标字符串中的所有字符都在映射表里,因此可以用unwrap()直接取出值。如果是生产环境,建议用expect("自定义提示信息")替代,或者显式处理字符不存在的情况。copied():将引用类型&u32复制为值类型u32,因为u32实现了Copytrait,这种方式比cloned()更高效。collect():将迭代器的处理结果收集为Vec<u32>,需要显式指定类型(也可通过上下文自动推导)。
如果需要处理可能不存在的字符,可以用unwrap_or设置默认值:
// 不存在的字符默认返回0 let looked_up: Vec<u32> = s.chars() .map(|c| lookup.get(&c).copied().unwrap_or(0)) .collect();
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

