C# - 从列表中计算最小日期/最大日期

Mur*_*dvi 8 asp.net date max find min

我有一个包含日期的列表:

List<string> StringDates;

    [0]: "04.03.2010"
    [1]: "09.03.2010"
    [2]: "11.03.2010"
    [3]: "12.03.2010"
    [4]: "16.03.2010"
    [5]: "18.03.2010"
    [6]: "19.03.2010"
    [7]: "23.03.2010"
    [8]: "25.03.2010"
    [9]: "26.03.2010"
Run Code Online (Sandbox Code Playgroud)

使用C#从这个列表中找出最小/最短日期的最佳/最短方法是什么?

Mar*_*ers 25

将它们转换为DateTime使用ParseExact(或TryParseExact),然后使用Linq获取Min和Max:

List<DateTime> dates = StringDates
   .Select(x => DateTime.ParseExact(x, "dd.MM.yyyy", null))
   .ToList();
DateTime minDate = dates.Min();
DateTime maxDate = dates.Max();
Run Code Online (Sandbox Code Playgroud)

请注意,在您的示例中,列表已按升序排序.如果你可以保证总是这样,并且你想要更好的性能,你可以采用第一个和最后一个元素,即O(1)而不是O(n).但是上面的内容更安全,所以即使你列出的内容可能总是被排序,你可能不应该进行这种优化,除非你确实需要它,以防有一天列表没有排序.


Rya*_*tti 19

使用linq!:

    var list = new List<DateTime>();
    list.Add(new DateTime(2010, 1, 1));
    list.Add(new DateTime(2008, 1, 1));
    list.Add(new DateTime(2009, 1, 1));
    Console.WriteLine(list.Max(date => date));
    Console.WriteLine(list.Min(date => date));
Run Code Online (Sandbox Code Playgroud)


Jef*_*dge 18

我喜欢简单的解决方案.

DateTime minDate = DateTime.MaxValue;
DateTime maxDate = DateTime.MinValue;
foreach (string dateString in StringDates)
{
    DateTime date = DateTime.Parse(dateString);
    if (date < minDate)
        minDate = date;
    if (date > maxDate)
        maxDate = date;
}
Run Code Online (Sandbox Code Playgroud)