我需要为一个大列表(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 个),从性能的角度来看这样做是否明智?
- 还是按日期排序(在每个数据列表的第一列中)然后使用更重要的方法会更好吗?
- 或者在 f# 或 c# 中是否有内置的东西?