我有一个DateTime的SortedDictionary和双_historicalValues
,以及一个传递DateTime HistoricalValue
的方法date
。 HistoricalValue
必须返回_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];
}
答案 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而不是您的项目是第一个且没有前一个元素。