2
class candle
{
    public DateTime date { get; set; }
    public double open { get; set; }
    public double high { get; set; }
    public double low { get; set; }
    public double close { get; set; }     
}
List<candle> candleList = new List<candle>();

假设我在 candeList 中添加了许多蜡烛,那么如何按日期对蜡烛列表进行排序?

另外,如何从candleList 中删除所有重复的条目?

谢谢

4

3 回答 3

4

非常标准,简单的linq。

var candleList = candleList.Distinct().OrderBy(x => x.date).ToList();

正如亚当下面提到的,这只会删除列表中的重复实例,而不是所有相同属性值的实例。

您可以实现自己IEqualityComparer<Candle>的选项以通过此选项。 IEqualityComparer

您可能想看看 msdn,并阅读 Linq 和 Enumerable Methods: MSDN - Enumerable Methods

于 2013-09-23T13:35:18.163 回答
1

如果您使用的是 .NET 3.5 及更高版本,则可以像这样在 IList 上使用 OrderBy 扩展:

var orderList = candleList.OrderBy(s => s.date);

或者你可以使用 SortBy

var orderList = candleList.SortBy((x, y) => x.date.CompareTo(y.date) );

要删除重复项,您可以执行以下操作:

var distinctList = orderList.GroupBy(x => x.date).Select(grp => grp.First());

最后再次获得列表

var finalList = distinctList.ToList();

流利的方式:

List<candle> finalList = candleList.OrderBy(s => s.date).Distinct().ToList();

顺便说一句,stackoverflow 中有很多其他问题可以解释每个问题,搜索它们,您会发现其他详细信息。

于 2013-09-23T13:38:33.683 回答
1

然后如何按日期对蜡烛列表进行排序?

var orderedList = candleList.OrderBy(p=>p.date);

另外,如何从candleList 中删除所有重复的条目?

你应该告诉我们你如何比较两个candle对象。假设date你可以这样做:

var uniqueList = candleList.GroupBy(p=>p.date).Where(p=>p.Count() == 1).ToList();

此外,您可以使用Distinct()或引入IEqualityComparer<candle>此方法来比较两个蜡烛对象并删除重复项。

于 2013-09-23T13:37:32.347 回答