Ceci est similaire à la réponse @ Jeffrey, mais au lieu de l'analyse syntaxique chaque date, il commence par le min et les dates max comparant les valeurs de chaîne, puis il analyse les valeurs à la fin.
// This method handles the date comparisons
private int WeirdComparer(string strDate1, string strDate2)
{
int res = string.Compare(strDate1, 6, strDate2, 6, 4);
if (res == 0)
res = string.Compare(strDate1, 3, strDate2, 3, 2);
if (res == 0)
res = string.Compare(strDate1, 0, strDate2, 0, 2);
return res;
}
public void FindMinAndMaxDates(IList<string> strDates, out DateTime minDate, out DateTime maxDate)
{
string min = "99.99.9999";
string max = "00.00.0000";
foreach (string strDate in strDates)
{
if (WeirdComparer(strDate, min) < 0)
min = strDate;
if (WeirdComparer(strDate, max) > 0)
max = strDate;
}
minDate = DateTime.ParseExact(min, "dd.MM.yyyy", null);
maxDate = DateTime.ParseExact(max, "dd.MM.yyyy", null);
}
J'ai effectivement commencé à écrire la même méthode, je ne pense pas que l'on puisse faire beaucoup de choses pour battre le temps O (n) 'à moins de le mettre dans un type de structure de tas qui le résoudrait en' O (logN) ' temps mais alors vous échanger des cycles de processeur qui sont incroyablement bon marché pour doubler le stockage de la mémoire qui est moins cher comparativement. –
@Jeffrey: Attention à la globalisation du format datetime pour les dates représentées comme des chaînes! – t0mm13b
@ tommieb75 - Oui, j'ai pensé à ça, mais je ne l'ai pas inclus, parce que j'étais paresseux. Cette partie peut être tirée de la réponse de Mark Byers. Je vais lui donner un vote upvote pour le morceau ParseExact, et l'appeler fait. :-) –