首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c#在区分大小写的字典中不区分大小写

使用c#在区分大小写的字典中不区分大小写
EN

Stack Overflow用户
提问于 2012-06-29 19:58:54
回答 2查看 1.4K关注 0票数 1

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

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

EN

回答 2

Stack Overflow用户

发布于 2012-06-29 20:04:50

所以,如果我理解正确的话,您想要一个字典,它保留字符串的原样,但以不区分大小写的方式散列,这样您仍然可以在O(1)分期时间内进行搜索,而不考虑大小写?

在我看来,在使用this constructor创建Dictionary时,您需要传递一个自定义的IEqualityComparer,并且在实现IEqualityComparer时,将字符串视为全部大写或小写,对哈希码也是如此(即返回转换为大写的字符串的哈希码)。

例如:

代码语言:javascript
复制
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")。

票数 4
EN

Stack Overflow用户

发布于 2013-03-07 02:08:58

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

示例:

代码语言:javascript
复制
Dictionary<string, string> openWith = 
                  new Dictionary<string, string>( 
                      StringComparer.CurrentCultureIgnoreCase);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11261375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档