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。
好吧,我真的不认为你的感觉像一个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
中有多少物品。您必须进行概要分析才能找到盈亏平衡点,但是对于非常长的可枚举对象,上面的方法比排序更高效。