C#从数组集合中删除"部分"重复项

Pet*_*etr 4 c# collections duplicates

我试图找到问题的答案,但我被困了.我有数组的集合,需要删除一些属性相同的记录.

示例:我有属性 - 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
Run Code Online (Sandbox Code Playgroud)

我想删除BeginTime,EndTime和Date相同且Price不是最低的记录.在此示例中,删除的记录将是第一个.

感谢您的任何帮助或建议

Ani*_*Ani 6

如何使用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();
Run Code Online (Sandbox Code Playgroud)

这通过将具有相同时间戳的项目分组在一起然后从每个组生成具有最小价格的项目来工作.请注意,如果组中的多个项目具有相同的最低价格,则查询将任意保留其中一个项目.

另请注意,对于MinBy运算符(例如来自morelinq的运算符),您可以通过以下方式提高Select运算效率:

.Select(g => g.MinBy(bar => bar.Price))
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想保留所有价格最低的物品,您可以:

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();
Run Code Online (Sandbox Code Playgroud)