[英]Searching case insensitively in case sensitive dictionary using c#
我有一本区分大小写的字典(非常大)。 我想使用忽略大小写(不区分大小写)搜索此词典的键。 我不想使用foreach遍历此字典并比较每个值,因为字典包含太多数据。
有没有更好的(最有效的)方法来使用C#做到这一点? 我想要一些建议。
因此,如果我对它的理解正确,那么您需要一个字典,该字典按原样保存字符串,但是以不区分大小写的方式散列,这样无论大小写,您仍然可以在O(1)摊销时间内进行搜索?
我看到它的方式,你需要通过一个自定义IEqualityComparer
创建时Dictionary
与此构造和实施时IEqualityComparer
治疗字符串,就好像它们是例如全部大写或小写和相同的散列码(即返回的哈希码的字符串变为大写)。
例如:
class MyComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return x.ToUpper() == y.ToUpper();
}
public int GetHashCode(string obj)
{
return obj.ToUpper().GetHashCode();
}
}
...
Dictionary<String, String> dict = new Dictionary<string, string>(new MyComparer());
现在,实际上您的字典通常可以正常保存字符串,但是在搜索或添加时,它们会将它们视为大写,因此将“ AbcD”与“ aBCd”(都称为“ ABCD”)相同。
都铎王朝的答案是一个很好的答案,我想建议您使用StringComparer.CurrentCultureIgnoreCase
而不是创建自己的比较器类(特别是如果预期结果相同)来补充它。
范例:
Dictionary<string, string> openWith =
new Dictionary<string, string>(
StringComparer.CurrentCultureIgnoreCase);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.