使用LINQ查找数组中的最小和最大日期?

aba*_*hev 17 .net c# linq arrays search

我有一个带有属性的类数组Date,即:

class Record
{
    public DateTime Date { get; private set; }
}

void Summarize(Record[] arr)
{
    foreach (var r in arr)
    {
        // do stuff 
    }
}
Run Code Online (Sandbox Code Playgroud)

我必须在这个数组中找到earliest(最小)和latest(最大)日期.

我怎么能用LINQ做到这一点?

dtb*_*dtb 39

如果您想找到最早或最晚的日期:

DateTime earliest = arr.Min(record => record.Date);
DateTime latest   = arr.Max(record => record.Date);
Run Code Online (Sandbox Code Playgroud)

Enumerable.Min,Enumerable.Max


如果要查找最早或最晚日期的记录:

Record earliest = arr.MinBy(record => record.Date);
Record latest   = arr.MaxBy(record => record.Date);
Run Code Online (Sandbox Code Playgroud)

请参阅:如何使用LINQ选择具有最小或最大属性值的对象

  • @drj:它迭代数组两次.但是,相同的复杂性,常数因子加倍. (4认同)
  • 绝对是最易读的方式.就纯效率而言,效率最高.我怀疑这段代码会成为瓶颈. (3认同)

Nat*_*ium 14

没有LINQ的旧学校解决方案:

DateTime minDate = DateTime.MaxValue;
DateTime maxDate = DateTime.MinValue;
foreach (var r in arr) 
{
    if (minDate > r.Date)
    {
        minDate = r.Date;
    }
    if (maxDate < r.Date)
    {
        maxDate = r.Date;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,对于downvoter:原来的问题是:`用C#`,并被编辑为`with LINQ` (6认同)