[英]Removing duplicates from generic list
我定义了一个对象,为其创建了一个IEqualityComparer类,并按如下方式使用它:
someList.Distinct(new DistinctComparer());
我以为这可以,但是我错了。 比较器对象在Equals方法中指定对象的11个属性。 我意识到删除的重复项是随机的。
我希望根据日期删除其他属性。 因此,对于在11个属性中具有重复项的对象,我想保留具有最新日期的对象,该对象的属性未包含在Equals方法中。
如果重要,则对象是USPS定义的美国地址。 等于方法:
public bool Equals(Address x, Address y)
{
return x.HouseNo == y.HouseNo &&
x.PreDir == y.PreDir &&
x.StreetName == y.StreetName &&
x.StreetSuffix == y.StreetSuffix &&
x.PostDir == y.PostDir &&
x.City == y.City &&
x.State == y.State &&
x.Zip5 == y.Zip5 &&
x.Zip4 == y.Zip4 &&
x.Sud == y.Sud &&
x.UnitNum == y.UnitNum;
}
我不知道如何保留最近销售日期的地址。 有什么线索吗? 谢谢
因此,对于在11个属性中具有重复项的对象,我想保留具有最新日期的对象,该对象的属性未包含在Equals方法中。
实际上, Distinct
将保留(或更确切地说,屈服)任何相等值中的第一个 。 因此,您可以先按相反的日期排序:
var results = someList.OrderByDescending(x => x.Date)
.Distinct(new CustomComparerWhichIgnoresDate());
这种行为无法得到保证,但是看到它改变我会感到震惊-这是最简单,最明显的方法。 (有关更多详细信息,请参见我的Edulinq帖子 。)您是否愿意依靠未记录的行为取决于您-LINQ to Objects中有很多未记录的东西,但是我会很高兴有信心依靠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.