我试图找到我的问题的答案,但我被卡住了。 我有数组集合,需要删除某些属性相同的记录。
例子: 我有属性 - BeginTime、EndTime、Date、Price。
07:00, 11:00, 2011-11-14, 90
08:00, 12:00, 2011-11-14, 110
07:00, 11:00, 2011-11-15, 120
07:00, 11:00, 2011-11-14, 50
我想删除 BeginTime、EndTime 和 Date 相同且价格不是最低的记录。 在此示例中,删除的记录将是第一个。
感谢任何帮助或建议
最佳答案
LINQ 怎么样:
IEnumerable<Bar> bars = ...
var lowestPriceBars = bars.GroupBy(bar => new { bar.BeginTime, bar.EndTime, bar.Date } )
.Select(g => g.OrderBy(bar => bar.Price).First())
.ToArray();
其工作原理是将具有相同时间戳的项目分组在一起,然后从每组中生成价格最低的项目。请注意,如果一组中有多个商品具有相同的最低价格,则查询将任意保留其中一个。
另请注意,使用 MinBy
运算符(例如来自多个 morelinq 的运算符),您可以通过以下方式使 Select
操作更高效:
.Select(g => g.MinBy(bar => bar.Price))
编辑:如果您想保留所有价格最低的商品,您可以:
var lowestPriceBars = bars.GroupBy(bar => new { bar.BeginTime, bar.EndTime, bar.Date })
.SelectMany(timeGroup => timeGroup
.GroupBy(bar => bar.Price)
.OrderBy(priceGroup => priceGroup.Key)
.First())
.ToArray();
关于C# 从数组集合中删除 "partial"重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997853/