【发布时间】:2017-06-12 23:17:01
【问题描述】:
我正在尝试编写一种方法,该方法将在给定日期列表和目标日期的情况下按时间顺序确定最接近的日期。例如,给定(简化的)日期集 {Jan 2011, March 2011, November 2011},目标日期为 2011 年 4 月,该方法将返回 2011 年 3 月
起初,我正在考虑使用 LINQ 的跳过,但我不确定合适的 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;
}
【问题讨论】: