简体   繁体   English

在时间跨度列表中找到时间跨度之间的最大持续时间

[英]Find the largest duration between timespans in list of timespans

I have written this code to find the largest timespan gap between ordered timespans.我编写这段代码是为了找到有序时间跨度之间的最大时间跨度差距。 It's working correctly but is there a more efficient way of accomplishing this as this could get really slow if there is a lot of items in the list?它工作正常,但是否有更有效的方法来完成此操作,因为如果列表中有很多项目,这可能会变得非常慢?

var events = this.Events.OrderBy(x => x.TimeSinceStart).ToList();

var largestTime = events.FirstOrDefault().TimeSinceStart;

for(int i = 0; i < events.Count() - 1; i ++)
{
    var difference = events[i + 1].TimeSinceStart - events[i].TimeSinceStart;

    if (difference > largestTime)
        largestTime = difference;
}

Your algorithm complexity can't improve because it's already in its optimal state ( O(nlogn) for sorting) but you can improve overall performance by skipping TimeSpan comparison using Ticks :您的算法复杂性无法提高,因为它已经处于最佳状态 state ( O(nlogn)用于排序)但是您可以通过使用Ticks跳过TimeSpan比较来提高整体性能:

var eventTicks = this.Events.Select(x => x.TimeSinceStart.Ticks).OrderBy(x => x).ToList();

var largestTime = eventTicks.FirstOrDefault();

for (int i = 0; i < eventTicks.Count - 1; i++)
{
    var difference = eventTicks[i + 1] - eventTicks[i];

    if (difference > largestTime)
        largestTime = difference;
}

var maxGap = TimeSpan.FromTicks(largestTime);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM