【发布时间】:2017-12-01 09:33:45
【问题描述】:
我有一个区分大小写的字典,
Dictionary<string, uint> itemNames = new Dictionary<string, uint>(StringComparer.Ordinal);
所以我可以在这本字典中有区分大小写的键。
例如,我可以有以下键值对,
- { 测试,10 }
- { 测试,20 }
- { test1, 30 }
- { test2, 40 }
...
当有人传递密钥时,我想检索该值。检索应该部分不区分大小写,这意味着,如果完全匹配,则返回区分大小写的结果,如果不存在区分大小写的键,则检索不区分大小写的键值。
例如,将上述值插入字典中
如果用户将密钥作为“TEST”传递,我需要返回 20。
如果用户将 key 作为 "TEST1" 传递,则找不到区分大小写的 key,所以我需要返回 30。
如何在 C# 中实现这一点?
【问题讨论】:
-
如果我要“test”,我应该得到 10 还是 20?
-
@JeroenMostert,这两个值都可以。可能可以返回第一个最佳匹配。所以 10.
-
添加@JeroenMostert 评论,这种混合永远不会好。确定您是否有区分大小写的键。
-
@OfirWinegarten 是的,你是对的一种方式。但我的要求是有区分大小写的字典,但是在检索值时,首选是最佳匹配,如果不是,至少返回不区分大小写。
-
您可以维护第二个字典,将不区分大小写的键映射到第一个字典中的“a”区分大小写键(或直接映射到值,具体取决于更方便的方法)。缺点:维护两本字典比较困难。优点:查找仍然是 O(1)(与遍历键的任何解决方案相反)。
标签: c# dictionary case-sensitive case-insensitive