c# - 对区分大小写的字典 C# 进行不区分大小写的搜索

标签 c# dictionary case-sensitive case-insensitive

我有一个区分大小写的字典,

 Dictionary<string, uint> itemNames = new Dictionary<string, uint>(StringComparer.Ordinal);

所以我可以在这本字典中有区分大小写的键。

例如我可以有以下键值对,

  1. { 测试, 10 }
  2. { 测试,20 }
  3. { 测试 1, 30 }
  4. { 测试 2, 40 }

...

当有人传递 key 时,我想检索值。检索应该部分不区分大小写,这意味着,如果完全匹配则返回区分大小写的结果,如果不存在区分大小写的键则检索不区分大小写的键值。

例如,将上述值插入到字典中

如果用户将 key 作为“TEST”传递,我需要返回 20。

如果用户将 key 作为“TEST1”传递,则找不到区分大小写的 key ,因此我需要返回 30。

如何在 C# 中实现这一点?

最佳答案

您应该首先使用TryGetValue 来检查是否有项目。如果没有,选择第一个匹配项:

string key = "test1";
int val;
if (!itemNames.TryGetValue(key, out val))
{
    val = itemNames.FirstOrDefault
                    (k => string.Equals(k.Key, key, StringComparison.OrdinalIgnoreCase)
                    )?.Value ?? 0;
}

不过请注意这段代码的性能。如果您有一个很大的字典,第一次尝试时有很多遗漏,第二个(不区分大小写)字典会更好。

关于c# - 对区分大小写的字典 C# 进行不区分大小写的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44795376/

相关文章:

c# - 日志属性未记录在 Serilog 中

c++ - 将 const Key_Type& 传递给 std::map 的 operator[]

c# - 键值依赖于值的键值对集合

actionscript - ActionScript 区分大小写吗?

java - 区分大小写的 jcombobox

c# - 如何获取通过网络共享身份验证的用户的用户名

c# - 如何将我的应用程序作为插件添加到 Visual Studio?

mercurial - 如何使 hg 忽略过滤器不区分大小写

c# - 使用 C# 将应用程序发送到特定屏幕

python - 如何将带有数字的数据转换为包含列表列表的字典?