Tag: iequalitycomparer

IEqualityComparer未按预期工作

我有一个存储在我的计算机上的文件路径List 。 我的目的是首先筛选出具有相同名称的文件,然后筛选出具有相同大小的文件。 为此,我创建了两个实现IEqualityComparer ,并实现了Equals和GetHashCode方法。 var query = FilesList.Distinct(new CustomTextComparer()) .Distinct(new CustomSizeComparer()); 这两个类的代码如下: – public class CustomTextComparer : IEqualityComparer { public bool Equals(string x, string y) { if (Path.GetFileName(x) == Path.GetFileName(y)) { return true; } return false; } public int GetHashCode(string obj) { return obj.GetHashCode(); } } public class CustomSizeComparer : IEqualityComparer { public bool […]

带整数键的哈希表(字典等)

我已经困惑了几天……随意拍下我的任何假设。 我们正在使用带整数键的字典。 我假设在这种情况下密钥的值直接用作哈希。 这是否意味着(如果密钥分组在一个小范围内)密钥散列的分布(与密钥本身相同,对吗?)将处于类似的小范围内,因此哈希表的选择不好? 是否更好的是提供一个IEqualityComparer,它使用素数和模数学来做一些聪明的东西来计算更好的分布式哈希?

如何使用具有不同类的多个属性的linq`Exce`?

我正在尝试学习Linq/Lambda表达式并被困在某个地方。 我在做什么 我创建了两个具有属性的类,这些属性具有一些共同的属性。 这些类就像(它的测试代码)。 class TestA { public int Id { get; set; } public int ProductID { get; set; } public string Category { get; set; } public TestA(int id, int procid, string category) { this.Id = id; this.ProductID = procid; this.Category = category; } } class TestB { public int ProductID { get; […]

C#3.0:需要从List 返回重复项

我在C#中有一个List 对象,我需要一种方法来返回列表中被认为是重复的对象。 我不需要Distinct结果集,我需要一个我将从我的存储库中删除的项目列表。 为了这个例子,让我说我有一个“汽车”类型的列表,我需要知道这些汽车中的哪一个与列表中的另一辆汽车颜色相同。 以下是列表中的汽车及其颜色属性: Car1.Color = Red; Car2.Color = Blue; Car3.Color = Green; Car4.Color = Red; Car5.Color = Red; 对于这个例子,我需要结果(IEnumerable ,List 或其他)来包含Car4和Car5,因为我想从我的存储库或数据库中删除这些,这样我的存储库中每种颜色只有一个汽车。 任何帮助,将不胜感激。

使用IEqualityComparer for Union

我只是想从两个列表中删除重复项并将它们组合成一个列表。 我还需要能够定义重复的内容。 我通过ColumnIndex属性定义副本,如果它们相同,则它们是重复的。 这是我采取的方法: 我找到了一个很好的例子,说明如何为代码段中只需要一次的随机场所编写内联比较器。 public class InlineComparer : IEqualityComparer { private readonly Func getEquals; private readonly Func getHashCode; public InlineComparer(Func equals, Func hashCode) { getEquals = equals; getHashCode = hashCode; } public bool Equals(T x, T y) { return getEquals(x, y); } public int GetHashCode(T obj) { return getHashCode(obj); } } 然后我只有两个列表,并尝试使用比较器对它们进行联合。 var formatIssues […]

使用带有容差的IEqualityComparer GetHashCode

我正在尝试实现一个对日期比较具有容差的IEqualityComparer 。 我也研究了这个问题 。 问题是我无法使用变通方法,因为我在LINQ .GroupJoin()使用IEqualityComparer 。 我尝试了一些允许容忍的实现。 我可以让Equals()工作,因为我有两个对象,但我无法弄清楚如何实现GetHashCode() 。 我最好的尝试看起来像这样: public class ThingWithDateComparer : IEqualityComparer { private readonly int _daysToAdd; public ThingWithDateComparer(int daysToAdd) { _daysToAdd = daysToAdd; } public int GetHashCode(IThingWithDate obj) { unchecked { var hash = 17; hash = hash * 23 + obj.BirthDate.AddDays(_daysToAdd).GetHashCode(); return hash; } } public bool Equals(IThingWithDate x, […]

List.Contains没有像希望的那样工作

如果我有一个MyBull类型的对象和一个List orig : // Just an example MyBull x = getMeTheObjectWithIdFromDB(9); orig.add(x); // Again same? data object MyBull y = getMeTheObjectWithIdFromDB(9); 为什么这是假的呢? // This is false, even though all the properties // of x and y are the same. orig.Contains(y);

用于SequenceEqual的IEqualityComparer

在C#中,是否存在使用SequenceEqual方法确定相等性的IEqualityComparer ?