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

在Rust中通过HashMap处理缺失键:字母数字字符串解码问题

字母数字字符串解码:字母映射HashMap,数字直接转对应u32

针对你的需求,只需要在map闭包里区分处理字母和数字字符即可——字母从HashMap中取值,数字字符直接转换为对应的u32数值。这里提供两种简洁的实现方式:

方式一:使用unwrap_or_else处理缺失值

利用unwrap_or_else在HashMap找不到对应键时执行数字转换逻辑,代码如下:

use std::collections::HashMap;

fn main() {
    let translit: HashMap<char, u32> = HashMap::from([
        ('A', 1),('B', 2),('C', 3),('D', 4),('E', 5),('F', 6),('G', 7),('H', 8),
        ('J', 1),('K', 2),('L', 3),('M', 4),('N', 5),('P', 7),('R', 9),('S', 2),
        ('T', 3),('U', 4),('V', 5),('W', 6),('X', 7),('Y', 8),('Z', 9)
    ]);
    let s = String::from("4S3BJ");
    let transliterated: Vec<u32> = s.chars()
        .map(|c| {
            // 先尝试从HashMap获取字母映射值,copied()将&u32转为u32
            translit.get(&c)
                .copied()
                // 若找不到,将数字字符转为u32,expect处理非预期字符
                .unwrap_or_else(|| c.to_digit(10).expect("输入包含非字母数字字符"))
        })
        .collect();
    dbg!(transliterated); // 输出: [4, 2, 3, 2, 1]
}

方式二:使用match显式分支处理

通过match直接区分数字和字母的处理逻辑,代码可读性更强:

use std::collections::HashMap;

fn main() {
    let translit: HashMap<char, u32> = HashMap::from([
        ('A', 1),('B', 2),('C', 3),('D', 4),('E', 5),('F', 6),('G', 7),('H', 8),
        ('J', 1),('K', 2),('L', 3),('M', 4),('N', 5),('P', 7),('R', 9),('S', 2),
        ('T', 3),('U', 4),('V', 5),('W', 6),('X', 7),('Y', 8),('Z', 9)
    ]);
    let s = String::from("4S3BJ");
    let transliterated: Vec<u32> = s.chars()
        .map(|c| match c {
            // 处理数字字符,直接转u32
            '0'..='9' => c.to_digit(10).unwrap(),
            // 处理字母,从HashMap取值,panic处理未知字母
            _ => *translit.get(&c).unwrap_or_else(|| panic!("未知字符: {}", c))
        })
        .collect();
    dbg!(transliterated); // 输出: [4, 2, 3, 2, 1]
}

关键说明

  • c.to_digit(10):将ASCII数字字符转换为对应的u32数值,返回Option<u32>,若字符不是数字则返回None。
  • copied():避免手动解引用&u32,直接获取HashMap中存储的u32值。
  • 错误处理:示例中用expect和panic!处理非预期字符,若需要更优雅的错误处理,可以将返回类型改为Result<Vec<u32>, String>。

内容的提问来源于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 15:25:18