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

标签 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

我想删除 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/

相关文章:

java - 查找HashMap中存储的字符的索引值

algorithm - 查找数组中的特殊数字

r - 合并数据并接收大量数据丢失

excel - 如何根据 'n' 是单元格中的数字插入 'n' 行数

php - 删除 SQL 中重复的字段条目

c# - 如何从在 Visual Studio 2012 中编写的 C# 代码生成 UML 图到 Visio 2010?

c# - WPF卡片设计

c# - Visual Studio 设计器中窗体的大小是否受限于屏幕分辨率?

c# - .NET DataGridView 显示对象字段

c# - 是否可以将 List<string> 作为事件记录类的属性