我有一个区分大小写的字典(非常大的一个)。我想使用ignore-case (不区分大小写)来搜索这个字典的关键字。我不想使用foreach遍历这个字典并比较每个值,因为字典包含太多的数据。
有没有更好的(最有效的)方法来使用C#来做到这一点?我想要一些建议。
发布于 2012-06-29 20:04:50
所以,如果我理解正确的话,您想要一个字典,它保留字符串的原样,但以不区分大小写的方式散列,这样您仍然可以在O(1)分期时间内进行搜索,而不考虑大小写?
在我看来,在使用this constructor创建Dictionary时,您需要传递一个自定义的IEqualityComparer,并且在实现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")。
发布于 2013-03-07 02:08:58
都铎的回答很好,我想通过建议你使用StringComparer.CurrentCultureIgnoreCase来补充它,而不是创建你自己的比较器类(特别是如果预期的结果是相同的)。
示例:
Dictionary<string, string> openWith =
new Dictionary<string, string>(
StringComparer.CurrentCultureIgnoreCase);来源:http://msdn.microsoft.com/en-us/library/ms132072.aspx
https://stackoverflow.com/questions/11261375
复制相似问题