Mam List<string>
z datami.
Moja lista jest:Sortuj ciąg znaków z datami w C#
{"01/01/2013","10/01/2013","20/01/2013"}
Chcę, aby posortować listę wyglądać tak:
{"20/01/2013","10/01/2013","01/01/2013"}
Jak mogę to zrobić?
Mam List<string>
z datami.
Moja lista jest:Sortuj ciąg znaków z datami w C#
{"01/01/2013","10/01/2013","20/01/2013"}
Chcę, aby posortować listę wyglądać tak:
{"20/01/2013","10/01/2013","01/01/2013"}
Jak mogę to zrobić?
z LINQ:
var list = new List<string> {"01/01/2013", "10/01/2013", "20/01/2013"};
var orderedList = list.OrderByDescending(x => DateTime.Parse(x)).ToList();
Nie należy stosować reprezentacje ciąg danych - Wszyscy żyjemy w obiektowego świata :)
Najlepszy sposób byłoby przekonwertować te ciągi do rzeczywistych obiektów DateTime i sortować je w odwrotnej kolejności poprzez LINQ :
var dates = Array.ConvertAll(dateStrings, x => DateTime.Parse(x));
return dates.OrderByDesc(x => x);
Innym sposobem byłoby wdrożenie niestandardowych funkcji sortowania, zobacz this link. Wtedy po prostu używać go w funkcji sortowania:
DateAsStringComparer myComparer = new DateAsStringComparer();
dateStrings.Sort(myComparer);
+1 ponieważ nie przeszkadzało z porównania ciągów jak ja :) –
faktycznie, nie trzeba lambda, można zrobić to w ten sposób -Array.ConvertAll (dateStrings, DateTime.Parse) – himanshupareek66
Ponieważ są one format UK/AUS (dzień/miesiąc/rok) można sortować je przy użyciu 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);
Osobiście Chciałbym przekonwertować je na DateTime
obiektów pierwszych ..
W hy chcesz użyć List<string>
zamiast List<DateTime>
?
List<DateTime> dates = ...
dates.OrderByDescending(c => c).ToList();
Jestem pewien, że miał swoje powody. Ja też tego potrzebuję, na przykład. –
Spróbuj tego:
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));
Co powiesz na niepoprawny ciąg datetime? Czy istnieje sposób na zmianę tej niepoprawnej daty z określonym ciągiem znaków? –