我有两个排序字典。第一个只有NAN,第二个有一些值。
我想将第一个的NAN更改为第二个的NAN。
SortedDictionary<double, float> newlogdict = newlog.Samples;
SortedDictionary<double, float> oldlogdict = oldlog.Samples;
foreach (KeyValuePair<double, float> kvp in newlogdict)
{
oldlogdict[kvp.Key] = kvp.Value;
}
它可以工作,但是速度太慢,有没有更快的方法?
答案 0 :(得分:1)
这很慢,因为您的代码增加了oldlogdict的大小(也许是它的两倍)。 如果
oldlogdict[kvp.Key]
在未找到的位置,那么您将在下一行添加新元素
oldlogdict[kvp.Key] = kvp.Value;
我已使用以下示例数据测试了您的代码:
SortedDictionary<double, float> newlogdict = new SortedDictionary<double, float>();
SortedDictionary<double, float> oldlogdict = new SortedDictionary<double, float>();
float x1 = 3.5F;
double a = 3.3;
newlogdict.Add(double.NaN, x1);
oldlogdict.Add(a, x1);
foreach (KeyValuePair<double, float> kvp in newlogdict)
{
oldlogdict[kvp.Key] = kvp.Value; //if key is not found it will be added
}
Console.WriteLine(newlogdict.Count);
Console.WriteLine(oldlogdict.Count);
请注意,在SortedDictionary
中,KeyNotFoundException
仅在Get
期间抛出,而不是MSDN中记录的Set
。
答案 1 :(得分:-1)
这是简述或合并,here
似乎没有更快的方法,但是代码更短