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

如何在HashMap中查找存在单复数拼写错误的键?

处理单复数拼写错误的简洁解决方案

可以通过生成原字符串的单复数变体候选列表,结合迭代器方法简化匹配逻辑,避免繁琐的嵌套判断。以下是具体实现:

辅助函数实现

// 首字母大写、其余字符小写的格式化函数
fn capitalize(s: &str) -> String {
    let mut chars = s.chars();
    match chars.next() {
        None => String::new(),
        Some(first) => {
            first.to_uppercase().collect::<String>() + chars.as_str().to_lowercase().as_str()
        }
    }
}

// 生成原字符串的单复数变体候选
fn get_plural_variants(s: &str) -> Vec<String> {
    let mut variants = vec![s.to_string()];
    if s.ends_with('s') {
        // 输入为复数,尝试匹配单数形式
        variants.push(s[0..s.len()-1].to_string());
    } else {
        // 输入为单数,尝试匹配复数形式
        variants.push(format!("{}s", s));
    }
    variants
}

修改后的主逻辑

use std::collections::HashMap;

let m: HashMap<&str, i32> = ...; // 你的HashMap初始化逻辑

let mut n = 0; // 假设n为初始值0的整数

for s in &fruits {
    let capitalized = capitalize(s);
    // 遍历变体列表,找到第一个存在于HashMap中的值
    let found_value = get_plural_variants(&capitalized)
        .iter()
        .find_map(|variant| m.get(variant.as_str()))
        .copied();

    match found_value {
        Some(value) => n |= value,
        None => println!("{} does not exist", s),
    }
}

关键逻辑说明

  • get_plural_variants函数会自动生成包含原格式化字符串和对应单复数变体的列表,覆盖用户输入与后端预期单复数相反的场景。
  • find_map方法会遍历变体列表,找到第一个能在HashMap中匹配到的值并返回,替代了繁琐的嵌套match判断。
  • 整体逻辑封装后,主代码保持简洁清晰,后续维护或扩展其他拼写规则也更方便。

内容的提问来源于stack exchange,提问作者Antonin GAVREL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:40:54