Linq删除重复优化

本文关键字:优化 删除 Linq | 更新日期: 2023-09-27 18:17:45

我一直使用这种技术来处理使用Linq的List<T>的重复项

var distrinctPricings = pricings.OrderByDescending(x => x.ValidFrom).GroupBy(x => x.Quantity).Select(x => x.First());

pricings集合是一个自定义类型的列表,没有实现任何类型的可比较。

在这里,我只取最近的订货,因为有相同数量的订货。

它工作得很好,但我想知道是否有更好的方法来做到这一点,因为它真的感觉像一个hack。

Linq删除重复优化

好吧,我真的不认为你的感觉像一个hack,但既然你提到了"优化",你当然可以提高性能不做排序。您只需要遍历一次可枚举对象:

var d = new Dictionary<int, Pricing>(): // Assuming .Quantity is an int
foreach(var p in pricings)
{
    if (!d.ContainsKey(p.Quantity) || p.ValidFrom > d[p.Quantity].ValidFrom)
    {
        d[p.Quantity] = p;
    }
}

这是否真的值得取决于你在pricings中有多少物品。您必须进行概要分析才能找到盈亏平衡点,但是对于非常长的可枚举对象,上面的方法比排序更高效。