问题标签 [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# - 不同的是不使用 LINQ to Objects
这是基于“LINQ in Action”中的一个示例。清单 4.16。
这会打印 Jon Skeet 两次。为什么?我什至尝试在 Author 类中覆盖 Equals 方法。Still Distinct 似乎不起作用。我错过了什么?
编辑:我也添加了 == 和 != 运算符重载。仍然没有帮助。
c# - 带有整数键的哈希表(字典等)
几天来我一直对此感到困惑……请随时否定我的任何假设。
我们正在使用带有整数键的字典。我假设在这种情况下键的值直接用作散列。这是否意味着(如果键被分组在一个小范围内)键散列的分布(与键本身相同,对吗?)将在一个类似的小范围内,因此对于散列表来说是一个糟糕的选择?
提供一个 IEqualityComparer 会更好地使用素数和模数学来计算更好的分布式哈希吗?
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" 被删除,而后一个仍保留在集合中!
这里有什么问题?谢谢
c# - 从 DataTable 和自定义 IEqualityComparer 中删除重复项
我如何实现IEqualityComparer<DataRow>
从DataTable
具有下一个结构的删除重复行:
默认比较器不起作用,因为每一行都有自己的唯一主键。
如何实现IEqualityComparer<DataRow>
将跳过主键并仅比较剩余的数据。
我有这样的事情:
和
但它只打电话GetHashCode()
不打电话Equals()
c# - 可以改进 IEqualityComparer 的这种实现吗?
我没有看到这段代码有任何问题,但感觉就像我错过了一些东西。也许可以减少行数。或者甚至有一个错误需要修复?我愿意接受任何建议。
c# - 是否有一个内置的 IEqualityComparer 只使用它们的哈希值来比较对象?
是否有内置的 IEqualityComparer 根据对象的 GetHashCode 值返回的值来比较对象?它很容易编写,但我更喜欢使用提供的类而不是自定义类。
当前代码:
c# - IEqualityComparer使用 ReferenceEquals
是否有使用的默认IEqualityComparer<T>
实现ReferenceEquals
?
EqualityComparer<T>.Default
使用 ObjectComparer,它使用object.Equals()
. 在我的情况下,对象已经实现IEquatable<T>
,我需要忽略它并仅通过对象的引用进行比较。
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.IQueryable
1[UnitedOne.Data.Sql.Product], System.Collections.Generic.IEnumerable1[UnitedOne.Data.Sql.Product], System.Collections.Generic.IEqualityComparer
1[UnitedOne.Data.Sql.Product])' 方法,并且此方法不能被翻译成商店表达式。
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<> ,但我希望得到不同的答案。
谢谢