gpt4 book ai didi

c# - 带元组键的不区分大小写的字典

转载 作者:可可西里 更新时间:2023-11-01 08:36:33 29 4
gpt4 key购买 nike

我有一个字典,其中的键是一个元组,其中第一项是日期,第二项是字符串。我希望字典不区分大小写。

我知道如果键只是一个字符串,我可以在声明字典时将 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();
}
}

这里没有参数检查,所以请不要将其视为生产代码。此外,需要注意 EqualsGetHashCode 实现满足最重要的条件,即如果两个元组比较相等,则它们必须具有相同的哈希值代码。在处理自定义文本比较时,如果不格外小心,很容易引入错误:例如,使用 ToLowerInvariant 而不是上面的 ToLower 将是一个错误(尽管可能不是浮出水面一段时间)。

关于c# - 带元组键的不区分大小写的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16428492/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com