2013-02-02 12 views
5

日付がList<string>です。
私のリストは、次のとおりです。日付をCで並べ替える文字列リスト

{"01/01/2013","10/01/2013","20/01/2013"} 

私はこのように見えるために、リストをソートしたい:

{"20/01/2013","10/01/2013","01/01/2013"} 

どのように私はこれを行うことができますか?

答えて

14

それらを変換します:

var list = new List<string> {"01/01/2013", "10/01/2013", "20/01/2013"}; 
var orderedList = list.OrderByDescending(x => DateTime.Parse(x)).ToList(); 
+0

無効なdatetime文字列がある場合はどうですか?無効なdatetimeを特定の文字列で変更する方法はありますか? –

4

あなたはデータの文字列表現を使用してはならない - 実際のDateTimeオブジェクトにこれらの文字列を変換し、LINQを経由して逆の順序でそれらを並べ替えることであろう我々は、すべてのオブジェクト指向の世界に生きている:)

ベストな方法:

var dates = Array.ConvertAll(dateStrings, x => DateTime.Parse(x)); 
return dates.OrderByDesc(x => x); 

もう一つの方法は、this linkを参照して、カスタムのソート機能を実装することです。次に、あなただけのソート機能でそれを使用したい:

DateAsStringComparer myComparer = new DateAsStringComparer(); 
dateStrings.Sort(myComparer); 
+0

1あなたは文字列の比較を気にしませんでしたので、私は実際に:) –

+0

を行ったように、あなたがラムダを必要としない、あなたはこのようにそれを行うことができます-Array.ConvertAll(dateStrings、DateTime.Parse) – himanshupareek66

0

彼らは英国/ AUS形式(日/月/年)であるため、あなたがOrderByDescendingを使用してそれらを並べ替えることができます。

個人的に
List<string> dates = new List<string>() { "01/01/2013", "10/01/2013", "20/10/2013" }; 

foreach (var date in dates.OrderByDescending(x => x)) 
    Console.WriteLine(date); 

私は、LINQで...最初DateTimeオブジェクトに

0

WあなたはList<DateTime>の代わりにList<string>を使用しますか?

List<DateTime> dates = ... 

dates.OrderByDescending(c => c).ToList(); 
+0

彼には理由があると確信しています。私もそれが必要です。 –

1

これを試してみてください:

List<string> s = new List<string>() { "01/01/2013", "10/01/2013", "20/01/2013" }; 
var d = s.OrderByDescending(i => DateTime.ParseExact(i, "dd/MM/yyyy", null)); 
関連する問題