1

我有一本区分大小写的字典(非常大)。我想使用忽略大小写(不区分大小写)来搜索这本字典的键。我不想使用 foreach 遍历这个字典并比较每个值,因为字典包含太多数据。

有没有更好(最有效)的方法来使用 C# 来做到这一点?我想要一些建议。

4

2 回答 2

4

因此,如果我理解正确,您想要一个保存字符串的字典,但以不区分大小写的方式散列,这样无论大小写如何,您仍然可以在 O(1) 摊销时间内搜索?

我看到它的方式你需要在使用这个构造函数IEqualityComparer创建时传递一个自定义,并且在实现处理字符串时,就好像它们都是大写或小写一样,并且哈希码相同(即返回字符串的哈希码转为大写)。DictionaryIEqualityComparer

例如:

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”)相同。

于 2012-06-29T12:04:50.233 回答
2

Tudor 的答案很好,我想通过建议您使用 StringComparer.CurrentCultureIgnoreCase而不是创建自己的比较器类来补充它(特别是如果预期结果相同)。

例子 :

Dictionary<string, string> openWith = 
                  new Dictionary<string, string>( 
                      StringComparer.CurrentCultureIgnoreCase);

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

于 2013-03-06T18:08:57.613 回答