私はDateTimeのSortedDictionaryを持っていて、_historicalValues
とdouble HistoricalValue
というメソッドを持っていて、DateTime date
が渡されています。 HistoricalValue
は、date
に最も近い_historicalValues
のDateTimeに対応するdoubleを返す必要があります。最も近いDateTimeを見つけるためにSortedDictionaryを利用できる良い方法はありますか?SortedDictionaryでDateTimeの一番近い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];
}
?年、月、週ごとにすべてのものを切り刻む価値があるかもしれません。あなたと仕事をするためにはるかに小さなセットを与え、物事をスピードアップすることができます。 –
ソートされた辞書は必要ありません。実際のペアと結果だけを使用しないためです。この場合、通常の辞書はうまく動作し、 'uint、double'や' long、double'のようにペアを格納してからdatetimeを対応するdatatypeに変換して保存したい場合は、 'date.ToBinary()'を使ってください。 – Bauss
歴史的な日付の短いリストであれば、それらを反復するだけです。大きなセットを最適化したい場合は、ソートされたリスト/配列を持ち、バリエーションを使ってバイナリ検索を実行できます。また、ヒープ実装を作成(または検索)することもできます。あなたのfindは挿入を実行しますが(アイテムを挿入しません)、2つの隣接する値を見つける必要があります。 –