问题标签 [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.
c# - 如何实现 IEqualityComparer 以返回不同的值?
我有一个 L2E 查询,它返回一些包含重复对象的数据。我需要删除那些重复的对象。基本上我应该假设如果它们的 ID 相同,那么对象是重复的。我试过q.Distinct()
了,但仍然返回重复的对象。然后我尝试实现我自己的 IEqualityComparer 并将其传递给该Distinct()
方法。该方法失败并显示以下文本:
LINQ to Entities 无法识别方法 'System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable
1[DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1[DAL.MyDOClass])' 方法,并且此方法无法转换为存储表达式。
这是 EqualityComparer 的实现:
IEqualityComparer
那么我该如何正确地写我自己的呢?
.net - 什么是字典的访问时间,列表> ,还是 O(1) 吗?
我想实现一个算法Dictionary<Dictionary<char,int>, List<string>>
来查找字典中的字谜单词。
由于我需要EqualityComparer
为此字典实现我的自定义,访问时间仍然是 O(1) 即大 O (1) 吗?
第二个问题,作为其中的一部分,EqualityComparer
我还需要实现GetHashCode()
. GetHashCode()
确定的有效方法是Dictionary<Dictionary<char,int>, List<string>>
什么?
我只是想出了这个方法,有没有更好的选择?
任何意见表示赞赏。谢谢!
c# - IEqualityComparer 和有什么区别和 IEquatable?
我想了解应该使用IEqualityComparer<T>
和使用的场景。IEquatable<T>
两者的 MSDN 文档看起来非常相似。
c# - IEqualityComparer和自定义类型
我正在尝试将自定义类型一分为二List<T>
并使用Intersect
/Except
方法。相等性由这种类型的三个字段确定。相等性不仅仅基于普通条件(所有字段都包含相同的数据)。我当然实现了IEqualityComparer<T>
. 我的问题是,GetHashCode()
一旦 hashCode 不同,方法返回不相等,这对我没有帮助,因为在我的情况下这不是真的。
当相等性基于多个条件时,有什么方法可以比较两个自定义对象,以便我可以使用相交/除外/不同等...?
这是我的代码:
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
. 有人可以给我一个例子来证明我错了吗?
c# - 比较两个列表并忽略特定属性
我有两个员工列表,我只想从中获取唯一记录,但这有一个转折点。每个列表都有一个 Employee 类:
我想比较匹配的唯一属性是名字和姓氏。我想在比较中完全忽略 ID。allFulltimeEmployees 列表中有 3 名员工,allParttimeEmployees 列表中有 3 名员工。名单中的两个项目的名字和姓氏匹配 - Sally Jones 和 Fred Jackson。列表中有一项不匹配,因为 FirstName 相同,但 LastName 不同:
所以我想在比较两个列表的过程中忽略类中的 ID 属性。我想将 Joe Williams 标记为不匹配,因为两个列表中的 Smith 和 Williams 的姓氏不匹配。
我尝试使用 IEqualityComparer 但它不起作用,因为它在参数中使用单个 Employee 类而不是 IEnumerable 列表:
我怎样才能成功地做我想做的事并执行这个操作?谢谢你的帮助!
linq - 使用 IEqualityComparer 检查特定值
所以这是我第一次尝试使用 IEqualityComparer 并且遇到了问题。
很可能我只是不明白代码在幕后做什么。
我提供的列表如下所示:
我正在尝试使用 Distinct() 来查找具有唯一 SN 和 'retest==1' 的项目数。
派生的 IEqualityCompare 类如下所示:
问题是这似乎产生了一个包含前两个项目的列表,而我正在寻找的是一个列表,其中只包含一个“retest == 1”的项目。
知道我在这里做错了什么吗?'retest == 0' 的记录是如何返回的?
回答
如果条件为假,则将对象视为不相等。Distinct 返回不相等的行。顺便说一句,您使用这种类型的代码违反了 IEqualityComparer 的合同。结果实际上是不确定的。- 用户
对于“违反合同”,我的意思是(例如)具有 retest==0 的对象将与自身比较不相等。- 用户
asp.net-mvc-3 - 如何获得与 EF 4.x DBSet Context 和 IEqualityComparer 一起使用的 Distinct 列表?
我已经尝试了几个小时来让 Distinct 为我的代码工作。
我正在使用 EF 4.3、MVC3、Razor 并尝试获取产品 ID 和名称的列表。当我对数据库运行 Sql 查询时,它很好。
Sql 查询是
该表中唯一的另一列是国家代码,这就是标准 distinct() 不起作用的原因。
我已经创建了一个 IEqualityComparer
这是代码:
这是我叫它的地方。
但是当它到达最后一行时,我得到一个错误说明......
谁能告诉我我做错了什么?
谢谢,
大卫
c# - 是否可以为匹配多对多的比较器编写哈希码函数?
我可以为以下比较器逻辑编写哈希码函数吗?
如果 (A, B, C) 中的至少两个属性匹配,则 的两个实例My
相等。
Equals 部分很简单,但我对哈希码部分感到困惑,我的一部分人认为这可能是不可能的。
更新:除了 Reed Copsey 的正确答案之外,Ethan Brown 清楚地说明了关于模糊比较器的一般有用性的一个非常重要的观点 - 请参阅他的答案以及全面了解这个问题/答案的基础。