问题标签 [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 投票
10 回答
114093 浏览

c# - 不同的是不使用 LINQ to Objects

这是基于“LINQ in Action”中的一个示例。清单 4.16。

这会打印 Jon Skeet 两次。为什么?我什至尝试在 Author 类中覆盖 Equals 方法。Still Distinct 似乎不起作用。我错过了什么?

编辑:我也添加了 == 和 != 运算符重载。仍然没有帮助。

0 投票
3 回答
2380 浏览

c# - 带有整数键的哈希表(字典等)

几天来我一直对此感到困惑……请随时否定我的任何假设。

我们正在使用带有整数键的字典。我假设在这种情况下键的值直接用作散列。这是否意味着(如果键被分组在一个小范围内)键散列的分布(与键本身相同,对吗?)将在一个类似的小范围内,因此对于散列表来说是一个糟糕的选择?

提供一个 IEqualityComparer 会更好地使用素数和模数学来计算更好的分布式哈希吗?

0 投票
4 回答
6584 浏览

c# - C# - 列表.Remove() 总是删除列表中的第一个对象

在 Visual Studio 2008 (C#) 中工作...我使用 List 集合来存储我的自定义类 (Shift) 的实例。

我想使用 Remove 方法从列表中删除某个班次。

但是 List.Remove() 总是删除它找到的第一个项目。

我已经为我的Shift实现了IComparable接口,我认为这样就足够了,然后我添加了一个IEqualityComparer的实现,它仍然没有效果。

这是我的实现的摘录:

地区 IComparable 成员

端区

地区 IEqualityComparer 成员

端区

然而,仍然 - 当列表包含两个班次时,说“8:00 - 15:00”;"12:00 - 16:00",调用 Remove("12:00-16:00") 会导致 "8:00 - 15:00" 被删除,而后一个仍保留在集合中!

这里有什么问题?谢谢

0 投票
1 回答
4665 浏览

c# - 从 DataTable 和自定义 IEqualityComparer 中删除重复项

我如何实现IEqualityComparer<DataRow>DataTable具有下一个结构的删除重复行:

默认比较器不起作用,因为每一行都有自己的唯一主键。

如何实现IEqualityComparer<DataRow>将跳过主键并仅比较剩余的数据。

我有这样的事情:

但它只打电话GetHashCode()不打电话Equals()

0 投票
2 回答
2797 浏览

c# - 可以改进 IEqualityComparer 的这种实现吗?

我没有看到这段代码有任何问题,但感觉就像我错过了一些东西。也许可以减少行数。或者甚至有一个错误需要修复?我愿意接受任何建议。

0 投票
1 回答
432 浏览

c# - 是否有一个内置的 IEqualityComparer 只使用它们的哈希值来比较对象?

是否有内置的 IEqualityComparer 根据对象的 GetHashCode 值返回的值来比较对象?它很容易编写,但我更喜欢使用提供的类而不是自定义类。

当前代码:

0 投票
5 回答
9287 浏览

c# - IEqualityComparer使用 ReferenceEquals

是否有使用的默认IEqualityComparer<T>实现ReferenceEquals

EqualityComparer<T>.Default使用 ObjectComparer,它使用object.Equals(). 在我的情况下,对象已经实现IEquatable<T>,我需要忽略它并仅通过对象的引用进行比较。

0 投票
3 回答
1346 浏览

c# - 如何实现 IEqualityComparer有公差

这个问题与这里的问题相似。

我们都知道PointF是什么,不是吗?这是数据结构:

如何以IEqualityComparer<PointF>宽容的态度实施?假设我的Equals代码是这样的

问题:如何实现正确GetHashCode的,以便对于字典PointF,我将正确访问元素?

我绞尽脑汁几天,但仍然找不到令人满意的解决方案。

0 投票
3 回答
13264 浏览

linq - 将 IEqualityComparer 与 LINQ to Entities except 子句一起使用

我有一个实体,我想与一个子集进行比较,并决定选择除子集之外的所有实体。

因此,我的查询如下所示:

ProductsToRemove()方法List<Product>在执行一些任务后返回 a 。所以最简单的形式就是上面的。

该类ProductComparer()如下所示:

但是,我不断收到以下异常:

LINQ to Entities 无法识别方法 'System.Linq.IQueryable 1[UnitedOne.Data.Sql.Product] Except[Product](System.Linq.IQueryable1[UnitedOne.Data.Sql.Product], System.Collections.Generic.IEnumerable 1[UnitedOne.Data.Sql.Product], System.Collections.Generic.IEqualityComparer1[UnitedOne.Data.Sql.Product])' 方法,并且此方法不能被翻译成商店表达式。

0 投票
2 回答
1673 浏览

c# - 如何在覆盖 GetHashCode() 的类型上使用 Object.GetHashCode()

我有一个实现 IEquatable<> 的 A 类,使用它的字段(比如 Ab 和 Ac)来实现/覆盖 Equals() 和覆盖 GetHashCode(),99% 的时间一切正常。类 A 是继承自接口 D 的层次结构(类 B、C)的一部分;它们都可以一起存储在字典 Dictionary 中,因此当它们都带有自己的默认 Equals()/GetHashCode() 时会很方便。

但是,在构建 AI 时,有时需要做一些工作来获取 Ab 和 Ac 的值;在发生这种情况时,我想存储对正在构建的实例的引用。在这种情况下,我不想使用 A 提供的默认 Equals()/GetHashCode() 覆盖。因此,我正在考虑实现一个 ReferenceEqualityComparer,这意味着强制使用 Object 的 Equals()/GetHashCode() :

问题是,由于 A 覆盖了 Object.GetHashCode(),我如何(在 A 之外)为 A 的实例调用 Object.GetHashCode()?

一种方法当然是 A 不实现 IEquatable<> 并始终向我创建的任何字典提供 IEqualityComparer<> ,但我希望得到不同的答案。

谢谢