作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个字典,其中的键是一个元组,其中第一项是日期,第二项是字符串。我希望字典不区分大小写。
我知道如果键只是一个字符串,我可以在声明字典时将 StringComparer.OrdinalIgnoreCase 作为参数传递,但是当键是元组时这似乎不起作用。
有没有办法指定 StringComparer 用于元组的第二项?
谢谢
最佳答案
使用this overload Dictionary
构造函数的一部分,它允许您为键指定自定义比较器。你会伴随着创建一个类来实现
IEqualityComparer<Tuple<string, DateTime>>
可能看起来像这样:
class CustomEqualityComparer : IEqualityComparer<Tuple<string, DateTime>>
{
public bool Equals(Tuple<string, DateTime> lhs, Tuple<string, DateTime> rhs)
{
return
StringComparer.CurrentCultureIgnoreCase.Equals(lhs.Item1, rhs.Item1)
&& lhs.Item2 == rhs.Item2;
}
public int GetHashCode(Tuple<string, DateTime> tuple)
{
return StringComparer.CurrentCultureIgnoreCase.GetHashCode(tuple.Item1)
^ tuple.Item2.GetHashCode();
}
}
这里没有参数检查,所以请不要将其视为生产代码。此外,需要注意 Equals
和 GetHashCode
实现满足最重要的条件,即如果两个元组比较相等,则它们必须具有相同的哈希值代码。在处理自定义文本比较时,如果不格外小心,很容易引入错误:例如,使用 ToLowerInvariant
而不是上面的 ToLower
将是一个错误(尽管可能不是浮出水面一段时间)。
关于c# - 带元组键的不区分大小写的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16428492/
我是一名优秀的程序员,十分优秀!