繁体   English   中英

使用C#在区分大小写的字典中不区分大小写地搜索

[英]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);

来源: http : //msdn.microsoft.com/en-us/library/ms132072.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM