gpt4 book ai didi

c# - linq Except 和自定义 IEqualityComparer

转载 作者:IT王子 更新时间:2023-10-29 04:49:06 27 4
gpt4 key购买 nike

我正在尝试在两个字符串列表上实现自定义比较器,并使用 .Except() linq 方法获取不属于列表之一的字符串。我进行自定义比较器的原因是因为我需要进行“模糊”比较,即一个列表中的一个字符串可以嵌入到另一个列表中的字符串中。

我做了以下比较器

public class ItemFuzzyMatchComparer : IEqualityComparer<string>
{
bool IEqualityComparer<string>.Equals(string x, string y)
{
return (x.Contains(y) || y.Contains(x));
}

int IEqualityComparer<string>.GetHashCode(string obj)
{
if (Object.ReferenceEquals(obj, null))
return 0;
return obj.GetHashCode();
}
}

当我调试时,唯一命中的断点是在 GetHashCode() 方法中。 Equals() 永远不会被触及。有什么想法吗?

最佳答案

如果返回的所有哈希码都不同,则永远不需要比较是否相等。

基本上问题在于您的散列和相等概念非常不同。我不完全确定您将如何更正此问题,但在您这样做之前它肯定不会起作用。

您需要确保如果 Equals(a, b) 返回 true,则 GetHashCode(a) == GetHashCode(b)。 (反之亦然——散列冲突是可以接受的,尽管显然您希望它们尽可能少。)

关于c# - linq Except 和自定义 IEqualityComparer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501007/

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