我必须使用词典
dic1<double, double>
dic2<double, double>
长度可能不匹配。所以我需要更新dic1中的dic1来加入dic1.key == dic2.key ...但是在dic1中保留那些在dic2中没有相应键的值。
.NET是3.5
答案 0 :(得分:4)
您可以迭代dic2中的值:
Dictionary<double, double> dic1;
Dictionary<double, double> dic2;
foreach (var pair in dic2)
{
dic1[pair.Key] = pair.Value;
}
或者,如果您想更新但不插入,请检查密钥是否存在:
foreach (var pair in dic2)
{
if (dic1.ContainsKey(pair.Key))
{
dic1[pair.Key] = pair.Value;
}
}
编辑:如果你真的想使用Linq,你可能想要创建一个新的字典,而不是更新现有的字典:
dic1 =
(from pair in dic1
let Value = dic2.ContainsKey(pair.Key) ? dic2[pair.Key] : pair.Value
select new { pair.Key, Value }
).ToDictionary(pair => pair.Key, pair => pair.Value);
或
dic1 =
(from pair in dic1
join pair2 in dic2 on pair.Key equals pair2.Key into g
select new { pair.Key, g.DefaultIfEmpty(pair).First().Value }
).ToDictionary(pair => pair.Key, pair => pair.Value);
在我看来,只是让它更难阅读。
答案 1 :(得分:1)
这是Linq外部左连接版本:
Dictionary<double, double> dictionary =
(from d1 in dic1
join d2 in dic2 on d1.Key equals d2.Key into kvp
from nv in kvp.DefaultIfEmpty(d1)
select nv).ToDictionary(x => x.Key, x => x.Value);
答案 2 :(得分:0)
试试这个:
var entries = dic2.Where(x => dic1.ContainsKey(x.Key));
foreach (KeyValuePair<double, double> entry in entries)
{
dic1[entry.Key] = entry.Value;
}