在时间跨度列表中找到时间跨度之间的最大持续时间
Find the largest duration between timespans in list of timespans
我编写这段代码是为了找出有序时间跨度之间的最大时间跨度差距。它工作正常,但是否有更有效的方法来完成此操作,因为如果列表中有很多项目,这可能会变得非常慢?
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;
}
您的算法复杂性无法提高,因为它已经处于最佳状态(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);
我编写这段代码是为了找出有序时间跨度之间的最大时间跨度差距。它工作正常,但是否有更有效的方法来完成此操作,因为如果列表中有很多项目,这可能会变得非常慢?
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;
}
您的算法复杂性无法提高,因为它已经处于最佳状态(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);