May*_*hak 9 .net c# linq linq-to-objects
我有2种不同类型的词典Dictionary<int, Fooclass> oldDic
和Dictionary<int, string> barList newDic
.现在我需要比较两个词典中的值.例如,密钥可以在
现在我需要根据他们的键来比较两个字典,任何帮助将不胜感激.
编辑:输出应该像第二个字典(newDic),但这将包含第二个字典(oldDic)的一些值.例如
1,"fooString"其中fooString是Fooclass的某些属性中的一些值....为了更清晰,请看这对我不起作用
var addedList = from list1 in baseListDic
join list2 in trackerlist on list1.Key equals list2.Key
select new { key = list1.Key, value = list1.Value._lead };
Run Code Online (Sandbox Code Playgroud)
这里baseListDic是oldDic,trackerlist是newDic ....如果我还不清楚,请告诉我...
Jef*_*ado 13
基于新词典创建新词典会更容易,忽略旧词典中具有相同键的项目.
var result = newDic
.Where(kvp => !oldDic.ContainsKey(kvp.Key))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Run Code Online (Sandbox Code Playgroud)
注意:尽管你的问题是"我需要比较两个词典中的值 "(强调我的),你的例子似乎只是证明了键的比较,所以我已经去了.如果它是您需要比较的值,您可能想要举例说明您的意思以及它们是否易于转换或可比较......
如果你只是实际比较键,那么你可以使用.Keys
字典的属性返回一个IEnumerable<TKey>
你可以做你的linq ...
例如:
var expectedOutput = newDic.Keys.Except(oldDic.Keys);
Run Code Online (Sandbox Code Playgroud)
这确实依赖于键是相同的类型,但如果你正在比较,这是不言而喻的.当然,没有什么能阻止你首先转换他们的类型,如果你用不同的类型做这个.
此外,如果您想在其中一个词典中获取值,您可以执行以下操作:
var newDicValues = expectedoutput.Select(x=>newDic[x]);
Run Code Online (Sandbox Code Playgroud)
或者,你知道,做任何其他你想要的linqy东西.:)