如何在Dictionary中通过大小写不敏感的密钥获取原始案例密钥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Dictionary中通过大小写不敏感的密钥获取原始案例密钥相关的知识,希望对你有一定的参考价值。

有词典:

var dictionary1 = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
    "abc1", 1, "abC2", 2, "abc3", 3;

我可以得到一个值:

var value = dictionary1["Abc2"];

如果搜索键qazxsw poi我需要获得原始密钥qazxsw poi和值2。

如何通过不区分大小写的密钥获取原始案例密钥?

答案

不幸的是,你不能这样做。 "Abc2"暴露"abC2"方法是完全合理的,但它没有这样做。

正如评论中提出的stop-cran一样,最简单的方法可能是使字典中的每个值与字典中的键具有相同的键。所以:

Dictionary<TKey, TValue>

如果这是类中的字段,则可以编写辅助方法以使其更简单。您甚至可以围绕bool TryGetEntry(TKey key, KeyValuePair<TKey, TValue> entry)编写自己的包装类来实现var dictionary = new Dictionary<string, KeyValuePair<string, int>>(StringComparer.OrdinalIgnoreCase) // You'd normally write a helper method to avoid having to specify // the key twice, of course. "abc1", new KeyValuePair<string, int>("abc1", 1), "abC2", new KeyValuePair<string, int>("abC2", 2), "abc3", new KeyValuePair<string, int>("abc3", 3) ; if (dictionary.TryGetValue("Abc2", out var entry)) Console.WriteLine(entry.Key); // abC2 Console.WriteLine(entry.Value); // 2 else Console.WriteLine("Key not found"); // We don't get here in this example ,但添加一个额外的Dictionary方法,这样调用者就不需要知道“内部”字典的样子。

另一答案

即使大小写与键不匹配,您也可以使用以下使用LINQ的代码来获取字典键值对。

注意:此代码可用于任何大小的字典,但它最适合较小的字典,因为LINQ基本上是逐个检查每个键值对,而不是直接转到所需的键值对。

IDictionary<TKey, TValue>

以上是关于如何在Dictionary中通过大小写不敏感的密钥获取原始案例密钥的主要内容,如果未能解决你的问题,请参考以下文章

TweetR 包中搜索词的大小写敏感性

如何在Electron应用程序中通过navigator.geolocation获取getCurrentPosition?

如何在 iOS 应用程序中存储机密、密钥、令牌、加密密钥等关键敏感信息

java中通过按钮改变graphics 中的字体大小,为啥这么写没有效果?应该如何改正?

Git -- 大小写

在 Swift 中通过计数从多维数组中找到最大的数组