繁体   English   中英

LINQ。 从另一个键对应的值中更新一个字典

[英]LINQ. Update one dictionary from corresponding values in another joined by key

我必须去字典

dic1<double, double>
dic2<double, double>

长度可能不匹配。 因此,我需要从由dic1.key == dic2.key加入的dic2中更新dic1中的值。但是要保留dic1中没有相应键的那些值。

.NET是3.5

您可以仅遍历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);

我认为,这只会增加阅读难度。

这是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);

尝试这个:

var entries = dic2.Where(x => dic1.ContainsKey(x.Key));
foreach (KeyValuePair<double, double> entry in entries)
{
    dic1[entry.Key] = entry.Value;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM