2013-09-23 117 views
1
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?如何按每个对象的成员对对象列表进行排序?

另外,我怎样才能从candleList中删除所有重复的条目?

谢谢

+0

'candleList.OrderBy(x => x.date)':) – I4V

+0

两个相关的问题:1)你想排序列表本身还是迭代排序输出? 2)你如何看待两个“蜡烛”实例相等? –

回答

4

漂亮的标准,简单的linq。

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

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

您可以实施自己的IEqualityComparer<Candle>作为通过该选项的选项。 IEqualityComparer

你可能想看看MSDN,和LINQ和可枚举的方法读了起来: MSDN - Enumerable Methods

+4

对类的“区别”只会引用相等性,而不是属性值。此外,这种排序不在位,它会产生一个“IEnumerable”。 –

+1

@AdamHouldsworth,你的观点非常有效和相关。但它不会使我的答案不正确(这是对downvoter)。我提供了更多信息。 – Khan

+1

我注意到了,我不是downvoter。 –

1

我怎么能那么按日期排序candleList?

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

另外,我怎样才能把candleList所有重复的条目?

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

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

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

1

如果你使用以上.NET 3.5,你可以使用OrderBy扩展了IList中,像这样:

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(); 

顺便说计算器中有相当多的其他问题,说明分别关于该问题,搜索他们,你会发现其他细节。

相关问题