C# Dictionary如何实现子字符串包含匹配以返回对应客户名称
实现字典Key包含匹配的修改方案
前置依赖
上述遍历匹配逻辑需要用到Linq,先在代码文件头部引入命名空间:
using System.Linq;
替换原有逻辑的代码
string projectName = (string)data["Project"]; // 遍历字典查找第一个被项目名称包含的Key对应的Value customerName = projectCustomerNameMapping .FirstOrDefault(kv => projectName.Contains(kv.Key)) .Value; // 没匹配到的话使用默认值 if (string.IsNullOrEmpty(customerName)) { customerName = "OnePlus"; }
可选优化说明
- 如果需要忽略大小写匹配,把
Contains逻辑修改为:kv => projectName.Contains(kv.Key, StringComparison.OrdinalIgnoreCase) - 如果存在多个Key可能同时被包含的场景(比如字典同时有
Dio和Diooiio两个Key),需要优先匹配更长的Key的话,可先对Key按长度倒序排序再匹配:customerName = projectCustomerNameMapping .OrderByDescending(kv => kv.Key.Length) .FirstOrDefault(kv => projectName.Contains(kv.Key)) .Value; - 如果字典规模很大(超过1000个Key)且匹配逻辑调用频率很高,建议预先把Key存入Aho–Corasick自动机优化匹配性能,普通小字典直接用上述遍历逻辑足够。
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

