2013-09-23 121 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(); 

順便說計算器中有相當多的其他問題,說明分別關於該問題,搜索他們,你會發現其他細節。

相關問題