You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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实现了Copy trait,这种方式比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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:35:18