大きなリスト (float*float) のルックアップ関数を作成する必要があります。この関数は、キーが見つからない場合は新しいエントリを追加し、キーが見つかった場合は値を合計します。メモ化された計算について読んだことがありますが、実際にはそれほど難しくありませんでした。ここに私が持っているものがあります:
let memoLookUp basearr lookarr =
let t = new System.Collections.Generic.Dictionary<float,float>()
for (a,b) in basearr do
t.Add(a,b)
for (a, b) in lookarr do
if t.ContainsKey(a) then t.[a] <- t.[a] + b
else t.Add(a,b)
t
サンプルデータ:
let basearr = [(41554., 10.0) ; (41555., 11.0) ; (41556., 12.0) ; (41557., 10.0) ; (41558., 13.0) ]
let lookarr = [(41555., 14.0) ; (41556., 15.0) ; (41559., 16.0)]
これは期待どおりに返されます。
私の質問は次のとおりです。
- リストが長い場合 (たとえば、それぞれ約 30000)、パフォーマンスの観点からこのようにすることは賢明ですか?
- それとも、(各データ リストの列 1 で) 日付で並べ替えてから、より命令的なアプローチを使用する方がよいでしょうか?
- それとも、f# または c# に sth ビルドさえありますか?