C# 定义字典

方法一

C# 复制代码
       Dictionary<string, string> StateCodesDic = new Dictionary<string, string>();
            StateCodesDic.Add("Johor", "01");
            StateCodesDic.Add("Kedah", "02");
            StateCodesDic.Add("Kelantan", "03");
            StateCodesDic.Add("Melaka", "04");

            StateCodesDic.Add("Negeri Sembilan", "05");
            StateCodesDic.Add("Pahang", "06");
            StateCodesDic.Add("Pulau Pinang", "07");
            StateCodesDic.Add("Perak", "08");
            StateCodesDic.Add("Perlis", "09");

            StateCodesDic.Add("Selangor", "10");
            StateCodesDic.Add("Terengganu", "11");
            StateCodesDic.Add("Sabah", "12");
            StateCodesDic.Add("Sarawak", "13");
            StateCodesDic.Add("Wilayah Persekutuan Kuala Lumpur", "14");
            StateCodesDic.Add("Wilayah Persekutuan Labuan", "15");
            StateCodesDic.Add("Wilayah Persekutuan Putrajaya", "16");
            StateCodesDic.Add("Not Applicable", "17");

方法二

你的代码逻辑是要根据 tempStateID = "KUALA" 匹配到 "Wilayah Persekutuan Kuala Lumpur" 并返回对应的编码 "14"

问题分析

  1. 当前代码的问题

    • 你使用了 lowerCaseDictionary,但 "KUALA" 并不直接匹配 "wilayah persekutuan kuala lumpur"(全小写)。
    • 你的 FindModel 使用了 Contains 查询,但 "kuala" 只是部分匹配,需要确保查询方式正确。
  2. 优化方案

    • 直接遍历 StateCodesDic,检查 Key 是否包含 tempStateID(不区分大小写)。
    • 使用 StringComparison.OrdinalIgnoreCase 进行不区分大小写的比较。

修改后的代码

csharp 复制代码
public ActionResult TestDemo()
{
    Dictionary<string, string> StateCodesDic = new Dictionary<string, string>
    {
        { "Johor", "01" },
        { "Kedah", "02" },
        { "Kelantan", "03" },
        { "Melaka", "04" },
        { "Negeri Sembilan", "05" },
        { "Pahang", "06" },
        { "Pulau Pinang", "07" },
        { "Perak", "08" },
        { "Perlis", "09" },
        { "Selangor", "10" },
        { "Terengganu", "11" },
        { "Sabah", "12" },
        { "Sarawak", "13" },
        { "Wilayah Persekutuan Kuala Lumpur", "14" },
        { "Wilayah Persekutuan Labuan", "15" },
        { "Wilayah Persekutuan Putrajaya", "16" },
        { "Not Applicable", "17" }
    };

    string tempStateID = "KUALA";
    string msg = "17"; // 默认值,未匹配时返回 "17"
    dynamic FindModel = new { Key = "", Value = "" };

    // 遍历字典,查找 Key 包含 "KUALA"(不区分大小写)的项
    foreach (var item in StateCodesDic)
    {
        if (item.Key.IndexOf(tempStateID, StringComparison.OrdinalIgnoreCase) >= 0)
        {
            FindModel = new { Key = item.Key, Value = item.Value };
            msg = item.Value;
            break; // 找到第一个匹配项后退出循环
        }
    }

    return Json(new
    {
        Data = FindModel,
        keyCode = msg
    });
}

关键优化点

  1. 直接遍历 StateCodesDic
    • 不需要额外转换大小写,直接使用 IndexOf + StringComparison.OrdinalIgnoreCase 进行模糊匹配。
  2. 更高效的匹配方式
    • item.Key.IndexOf(tempStateID, StringComparison.OrdinalIgnoreCase) >= 0 检查 Key 是否包含 "KUALA"(不区分大小写)。
  3. 默认值处理
    • 如果没有匹配项,默认返回 "17"(对应 "Not Applicable")。

测试结果

  • tempStateID = "KUALA" 时,会匹配到 "Wilayah Persekutuan Kuala Lumpur",返回:

    json 复制代码
    {
        "Data": { "Key": "Wilayah Persekutuan Kuala Lumpur", "Value": "14" },
        "keyCode": "14"
    }
  • 如果 tempStateID = "JOHOR",则返回:

    json 复制代码
    {
        "Data": { "Key": "Johor", "Value": "01" },
        "keyCode": "01"
    }
  • 如果 tempStateID = "XXX"(无匹配),则返回:

    json 复制代码
    {
        "Data": { "Key": "", "Value": "" },
        "keyCode": "17"
    }

这样就能正确获取到 "14" 这个编码了! 🚀

相关推荐
李梨同学丶13 分钟前
0201好虫子周刊
后端
思想在飞肢体在追23 分钟前
Springboot项目配置Nacos
java·spring boot·后端·nacos
Loo国昌3 小时前
【垂类模型数据工程】第四阶段:高性能 Embedding 实战:从双编码器架构到 InfoNCE 损失函数详解
人工智能·后端·深度学习·自然语言处理·架构·transformer·embedding
ONE_PUNCH_Ge4 小时前
Go 语言泛型
开发语言·后端·golang
良许Linux4 小时前
DSP的选型和应用
后端·stm32·单片机·程序员·嵌入式
不光头强4 小时前
spring boot项目欢迎页设置方式
java·spring boot·后端
怪兽毕设4 小时前
基于SpringBoot的选课调查系统
java·vue.js·spring boot·后端·node.js·选课调查系统
学IT的周星星4 小时前
Spring Boot Web 开发实战:第二天,从零搭个“会卖萌”的小项目
spring boot·后端·tomcat
郑州光合科技余经理4 小时前
可独立部署的Java同城O2O系统架构:技术落地
java·开发语言·前端·后端·小程序·系统架构·uni-app
Remember_9935 小时前
Spring 事务深度解析:实现方式、隔离级别与传播机制全攻略
java·开发语言·数据库·后端·spring·leetcode·oracle