加入了另一種價值觀我有字典LINQ。更新一個字典從相應的鍵
dic1<double, double>
dic2<double, double>
長度可能會不匹配。所以我需要從dic2更新dic1中的值,通過dic1.key == dic2.key加入...但是保留那些在dic2中沒有對應鍵的dic1中的值。
.NET 3.5
加入了另一種價值觀我有字典LINQ。更新一個字典從相應的鍵
dic1<double, double>
dic2<double, double>
長度可能會不匹配。所以我需要從dic2更新dic1中的值,通過dic1.key == dic2.key加入...但是保留那些在dic2中沒有對應鍵的dic1中的值。
.NET 3.5
這裏有一個LINQ左外連接的版本:如果DIC2包含的元素不DIC1,那麼您將添加新的元素
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);
你可以只遍歷值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);
在我看來,僅僅就更難讀,雖然。
。 – 2010-07-15 12:01:23
這是LINQ的問題。 – 2010-07-15 12:16:26
我在做foreach .. – 2010-07-15 13:06:06
試試這個:
var entries = dic2.Where(x => dic1.ContainsKey(x.Key));
foreach (KeyValuePair<double, double> entry in entries)
{
dic1[entry.Key] = entry.Value;
}
啊 - 太遲了 - 你已經接受了以前的帖子作爲答案。 – ChrisBD 2010-07-15 13:17:10
實際上這個工作。但我決定繼續與foreach合作。 – 2010-07-15 14:06:58
@Bobb好選擇:) – 2010-07-15 15:15:50