我正在尝试编写一个方法,该方法将确定最接近给定日期的日期,给定一组日期和目标日期。例如,给定一个(简化的)日期集{2011年1月,2011年3月,2011年11月}和目标日期为2011年4月,该方法将返回2011年3月。
起初,我考虑使用LINQ的skip函数,但我不确定适当的Func是否会在超过日期之前停止。下面的代码似乎是可行的解决方案,但我不确定是否有更有效的方法来实现这一点。假设Last和First每次都是线性时间。
源数据集可以包含0到10,000个日期,通常约为5,000个。此外,我将在5到50次迭代中遍历整个过程(这是不同迭代的目标日期数)。
起初,我考虑使用LINQ的skip函数,但我不确定适当的Func是否会在超过日期之前停止。下面的代码似乎是可行的解决方案,但我不确定是否有更有效的方法来实现这一点。假设Last和First每次都是线性时间。
源数据集可以包含0到10,000个日期,通常约为5,000个。此外,我将在5到50次迭代中遍历整个过程(这是不同迭代的目标日期数)。
// assume dateSet are ordered ascending in time.
public DateTime GetClosestDate(IEnumerable<DateTime> dateSet, DateTime targetDate)
{
var earlierDate = dateSet.Last(x => x <= targetDate);
var laterDate = dateSet.First(x => x >= targetDate);
// compare TimeSpans from earlier to target and later to target.
// return closestTime;
}
return dateSet.OrderBy(date => Math.Abs((date - targetDate).Ticks)).First();
- Mike Mertsock