均衡两个字典的最快方法

时间:2019-01-02 16:30:31

标签: c# .net linq dictionary

我有两个排序字典。第一个只有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;
}

它可以工作,但是速度太慢,有没有更快的方法?

2 个答案:

答案 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

似乎没有更快的方法,但是代码更短