问题标签 [iequalitycomparer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
78856 浏览

c# - 如何实现 IEqualityComparer 以返回不同的值?

我有一个 L2E 查询,它返回一些包含重复对象的数据。我需要删除那些重复的对象。基本上我应该假设如果它们的 ID 相同,那么对象是重复的。我试过q.Distinct()了,但仍然返回重复的对象。然后我尝试实现我自己的 IEqualityComparer 并将其传递给该Distinct()方法。该方法失败并显示以下文本:

LINQ to Entities 无法识别方法 'System.Linq.IQueryable 1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable1[DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1[DAL.MyDOClass])' 方法,并且此方法无法转换为存储表达式。

这是 EqualityComparer 的实现:

IEqualityComparer那么我该如何正确地写我自己的呢?

0 投票
3 回答
436 浏览

.net - 什么是字典的访问时间,列表> ,还是 O(1) 吗?

我想实现一个算法Dictionary<Dictionary<char,int>, List<string>>来查找字典中的字谜单词。

由于我需要EqualityComparer为此字典实现我的自定义,访问时间仍然是 O(1) 即大 O (1) 吗?

第二个问题,作为其中的一部分,EqualityComparer我还需要实现GetHashCode(). GetHashCode()确定的有效方法是Dictionary<Dictionary<char,int>, List<string>>什么?

我只是想出了这个方法,有没有更好的选择?

任何意见表示赞赏。谢谢!

0 投票
5 回答
30839 浏览

c# - IEqualityComparer 和有什么区别和 IEquatable?

我想了解应该使用IEqualityComparer<T>和使用的场景。IEquatable<T>两者的 MSDN 文档看起来非常相似。

0 投票
1 回答
2192 浏览

c# - IEqualityComparer vs EqualityComparer?

我读过这篇文章,但它没有回答我的问题。

MSDN

我们建议您从 EqualityComparer(Of T) 类派生而不是实现 IEqualityComparer(Of T) 接口,因为 EqualityComparer(Of T) 类使用 IEquatable(Of T).Equals 方法而不是 Object 来测试相等性。等于方法。

但是如果我看一下实现,它们都使用通用类型:

我错过了什么?

0 投票
2 回答
1346 浏览

c# - IEqualityComparer和自定义类型

我正在尝试将自定义类型一分为二List<T>并使用Intersect/Except方法。相等性由这种类型的三个字段确定。相等性不仅仅基于普通条件(所有字段都包含相同的数据)。我当然实现了IEqualityComparer<T>. 我的问题是,GetHashCode()一旦 hashCode 不同,方法返回不相等,这对我没有帮助,因为在我的情况下这不是真的。

当相等性基于多个条件时,有什么方法可以比较两个自定义对象,以便我可以使用相交/除外/不同等...?

这是我的代码:

0 投票
3 回答
2803 浏览

c# - 平等比较器.默认误解?

我有一个类Person,它实现了 Equals() 方法IEquatable<Person>(也覆盖Object.Equals了方法,现在让我们忽略 GetHashcode() 方法)

好的,让我们开始:

让我们谈谈这一行:

我在理解这部分时遇到问题:

我听说这EqualityComparer<Person>.Default将检查该类是否正在实现IEquatable-它将采用Equals(Person other)Method 而不是Equals(object obj). 它的优点是避免拳击

在此处输入图像描述

Equals(Person other)运行或不 EqualityComparer<Person>.Default运行 (因为它正在实现 IEquatable)

那么我们在谈论什么拳击?没有!

唯一 Equals(object obj)会运行的时间是:

我是程序员!object当它实际上是一个时,我永远不会发送一个Person

我错过了什么?我无法理解EqualityComparer<Object>.Default. 有人可以给我一个例子来证明我错了吗?

0 投票
5 回答
5161 浏览

c# - 比较两个列表并忽略特定属性

我有两个员工列表,我只想从中获取唯一记录,但这有一个转折点。每个列表都有一个 Employee 类:

我想比较匹配的唯一属性是名字和姓氏。我想在比较中完全忽略 ID。allFulltimeEmployees 列表中有 3 名员工,allParttimeEmployees 列表中有 3 名员工。名单中的两个项目的名字和姓氏匹配 - Sally Jones 和 Fred Jackson。列表中有一项不匹配,因为 FirstName 相同,但 LastName 不同:

所以我想在比较两个列表的过程中忽略类中的 ID 属性。我想将 Joe Williams 标记为不匹配,因为两个列表中的 Smith 和 Williams 的姓氏不匹配。

我尝试使用 IEqualityComparer 但它不起作用,因为它在参数中使用单个 Employee 类而不是 IEnumerable 列表:

我怎样才能成功地做我想做的事并执行这个操作?谢谢你的帮助!

0 投票
1 回答
232 浏览

linq - 使用 IEqualityComparer 检查特定值

所以这是我第一次尝试使用 IEqualityComparer 并且遇到了问题。

很可能我只是不明白代码在幕后做什么。

我提供的列表如下所示:

我正在尝试使用 Distinct() 来查找具有唯一 SN 和 'retest==1' 的项目数。

派生的 IEqualityCompare 类如下所示:

问题是这似乎产生了一个包含前两个项目的列表,而我正在寻找的是一个列表,其中只包含一个“retest == 1”的项目。

知道我在这里做错了什么吗?'retest == 0' 的记录是如何返回的?

回答

如果条件为假,则将对象视为不相等。Distinct 返回不相等的行。顺便说一句,您使用这种类型的代码违反了 IEqualityComparer 的合同。结果实际上是不确定的。- 用户

对于“违反合同”,我的意思是(例如)具有 retest==0 的对象将与自身比较不相等。- 用户

0 投票
2 回答
2045 浏览

asp.net-mvc-3 - 如何获得与 EF 4.x DBSet Context 和 IEqualityComparer 一起使用的 Distinct 列表?

我已经尝试了几个小时来让 Distinct 为我的代码工作。

我正在使用 EF 4.3、MVC3、Razor 并尝试获取产品 ID 和名称的列表。当我对数据库运行 Sql 查询时,它很好。

Sql 查询是

该表中唯一的另一列是国家代码,这就是标准 distinct() 不起作用的原因。

我已经创建了一个 IEqualityComparer

这是代码:

这是我叫它的地方。

但是当它到达最后一行时,我得到一个错误说明......

谁能告诉我我做错了什么?

谢谢,

大卫

0 投票
6 回答
284 浏览

c# - 是否可以为匹配多对多的比较器编写哈希码函数?

我可以为以下比较器逻辑编写哈希码函数吗?

如果 (A, B, C) 中的至少两个属性匹配,则 的两个实例My相等。

Equals 部分很简单,但我对哈希码部分感到困惑,我的一部分人认为这可能是不可能的。

更新:除了 Reed Copsey 的正确答案之外,Ethan Brown 清楚地说明了关于模糊比较器的一般有用性的一个非常重要的观点 - 请参阅他的答案以及全面了解这个问题/答案的基础。