如何在SortedDictionary中找到DateTime最近的DateTime键?

时间:2016-03-31 07:23:16

标签: c# datetime dictionary

我有一个DateTime的SortedDictionary和双_historicalValues,以及一个传递DateTime HistoricalValue的方法dateHistoricalValue必须返回_historicalValues中最接近date的DateTime的相应double。有没有一种很好的方法可以利用SortedDictionary来找到最接近的DateTime?

我认为有更好的方法来处理这个任务,因为我的方法根本不利用SortedDictionary,并且繁琐地必须迭代整个集合以首先评估日期差异。

private readonly SortedDictionary<DateTime, double> _historicalValues;    

public double HistoricalValue(DateTime date)
{
    if (_historicalValues.ContainsKey(date))
        return _historicalValues[date];

    var closestDate = _historicalValues.Keys.OrderBy(
          t => Math.Abs((t - date).Ticks)).First();
    return _historicalValues[closestDate];
}

2 个答案:

答案 0 :(得分:2)

我会使用这个答案中提到的MinBy:enter link description here

然后像这样使用它:

return _historicalValues.MinBy(kvp => Math.Abs((kvp.Key - date).Ticks)).Value;

答案 1 :(得分:0)

您可以将SortedDictionary更改为SortedList<DateTime, double>。 在这种情况下,您将获得前一个和下一个值,并从2中选择最接近的值。 例如,以前的密钥是:

int indexOfPrevious = dictionary.IndexOfKey(knownKey) - 1;

如果&lt; 0而不是您的项目是第一个且没有前一个元素。