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

c# - C# 3.0:需要从 List<> 返回重复项

我在 C# 中有一个 List<> 对象,我需要一种方法来返回那些在列表中被视为重复的对象。我不需要 Distinct 结果集,我需要我将从存储库中删除的那些项目的列表。

为了这个例子,假设我有一个“汽车”类型的列表,我需要知道这些汽车中的哪些与列表中的另一个颜色相同。以下是列表中的汽车及其颜色属性:

对于此示例,我需要结果(IEnumerable<>、List<> 或其他)包含 Car4 和 Car5,因为我想从我的存储库或数据库中删除它们,以便我的存储库中每种颜色只有一辆汽车。任何帮助,将不胜感激。

0 投票
1 回答
7523 浏览

vb.net - 你如何实现 IEqualityComparer在 VB.NET 中?

我有以下函数循环遍历目录并检查指定的文件夹和文件:

我这样做的原因是我可以确保每个列表中的项目和传递的文件/文件夹都是小写的,否则我会做这样的事情:

我的同事早些时候向我提到过使用比较器可以忽略大小写。扩展可以有一个比较器.Contains参数和值。我在 google 和 MSDN 上进行了一些搜索,并提出了以下比较器:

当它到达theCompare(x.name, y.name) = 0线路时,它会出错,这是错误消息:

At least one object must implement IComparable.

任何人都知道这个错误意味着什么以及如何纠正它?

0 投票
2 回答
4921 浏览

.net - IEqualityComparer.Equals 与 IEnumerable.Contains 一起使用时,x 或 y 是列表中的值吗?

IEnumberable 有一个扩展方法 Contains<T>,它接受两个参数。第一个参数是要检查的值,第二个参数是 IEqualityComparer 的实现。查看 IEqualityComparer.Equals 它需要两个名为 x 和 y 的参数,用于比较第一个和第二个对象。

我的问题是 IEnumerable 的值是 X 还是 Y?

例子

当它为第一个值调用 Equals 方法时,它将是 Equals("a","d") 还是 Equals("d","a")?

0 投票
2 回答
7614 浏览

c# - 具有自定义 IEqualityCompare 的 HashSet 构造函数由 lambda 定义?

目前HashSet<T>,允许您自己定义相等比较的构造函数是HashSet<T>(IEqualityComparer<T> comparer)构造函数。我想将此 EqualityComparer 定义为 lambda。

我发现这篇博客文章创建了一个类,该类允许您通过 lambda 生成比较器,然后使用扩展方法隐藏该类的构造以执行例如 except()。

现在我想做同样的事情,但使用构造函数。是否可以通过扩展方法创建构造函数?还是有另一种方法我可以以某种方式创建一个HashSet<T>(Func<T,T,int> comparer)

--UPDATE--
为清楚起见,这是我正在尝试完成的(一个片段)的手绘版本:

或更理想地

0 投票
4 回答
5852 浏览

vb.net - 自定义 Generic.IEqualityComparer(Of T) - 编译器错误

我正在尝试实现一个简单的 IEqulityComparer 以与 LINQ 集合一起使用。为了讨论目的,我编写了以下代码,将其简化为最简单的形式...

我遇到的问题是这两个函数都会引发编译器警告“函数'getHashCode'(或'Equals')在基类'Object'中隐藏了一个可覆盖的方法。要覆盖基类方法,该方法必须声明为'Overrides ’。”

但是,如果我将它们声明为覆盖,我会收到错误“函数'GetHashCode'不能被声明覆盖,因为它没有覆盖基类中的函数。”!!

我还在“Implements”行收到编译器错误,大意是我必须实现“getHashCode”,但我认为这是第一个问题的结果。

我所有的研究表明我应该没事 - 请问有人有任何线索吗?

0 投票
4 回答
5282 浏览

vb.net - LINQ 除了使用自定义比较器

如果 IEqualityComparer 根据结果集中的单个字段的值排除某些结果,我正在尝试使用自定义实现对 LINQ 结果集使用“Except”方法。

所以,以简化的形式,我有......

我的比较器如下...

我在“.Except”行收到一个无效的强制转换异常,并显示消息“无法将'...insCompare'类型的对象强制转换为'System.Collections.Generic.IEqualityComparer'”

任何人都可以解释为什么这可能是请。

0 投票
3 回答
11258 浏览

linq - 匿名类型的 IEqualityComparer

我有这个

如果允许,我想这样做

我尝试使用通用LambdaComparer,但由于我使用匿名类型,因此没有与之关联的类型。

“帮帮我欧比旺克诺比,你是我唯一的希望”

0 投票
2 回答
397 浏览

generics - 有没有办法在 List 中找到对象的属性使用包含?

我在徘徊如何找出我的列表中是否已经存在一个对象。我在列表中添加“newPerson”(Person 类的实例),但检查列表中是否存在 newPerson 内容/属性。

这件作品很好:

首先,我想简化/优化上面这段丑陋的代码。所以我想到了使用 Contains 方法。

上面的第二个代码不起作用,我认为它是在比较对象引用而不是对象内容/属性。

Stackoverflow 和链接文本中的某个人正在谈论使用实现 IEqualityComparer 的类。我试了一下,但现在代码更大了!就像是:

并使用这个比较器:

有没有更小的方法可以在列表中找到我的对象的属性?

0 投票
4 回答
6713 浏览

c# - IEnumerable.Except() 和自定义比较器

我在使用 except() 方法时遇到问题。它不返回差值,而是返回原始集合。

我尝试在 Account 类中实现 IEquatable 和 IEqualityComparer。我还尝试为 Account 创建一个单独的 IEqualityComparer 类。

当从 main 调用 except() 方法时,它似乎没有调用我自定义的 Equals() 方法,但是当我尝试 Count() 时,它确实调用了自定义 GetHashCode() 方法!

我确定我在某个地方犯了一个小错误,我希望一双新的眼睛可以帮助我。

主要的:

帐户:

Lambda比较器:

0 投票
1 回答
389 浏览

.net - 哈希集和所有成员相同的类的不同实例

假设我有一个名为 myclass 的类。

在我的代码中,我有两个 myclass 实例,myclass1 和 myclass2。它们的一切(公共和私有)属性都是相同的。

如果我尝试将它们都添加到 HashSet 中,它会同时添加还是只添加一个?如果它同时添加而我不想要它,我可以在 myclass 定义中覆盖 equals 并且 HasSet 会知道如何使用它吗?