1
我有两个词典,一个包含原始数据,另一个包含新数据。我想比较这两个字典并返回一个字典并返回包含更新的第三个字典。比较两个词典并返回差异
Dictionary<int, Dictionary<string, string>> OriginalDictionary = new Dictionary
{
{1, new Dictionary<string, string>
{{"name", "adam"},
{"age", "15"}
{"occupation", "student"}},
{2, new Dictionary<string, string>
{{"name", "bob"},
{"age", "40"}
{"occupation", "doctor"}},
{3, new Dictionary<string, string>
{{"name", "cameron"},
{"age", "32"}
{"occupation", "teacher"}},
}
Dictionary<int, Dictionary<string, string>> NewDictionary = new Dictionary
{
{1, new Dictionary<string, string>
{{"name", "adam"},
{"age", "15"}
{"occupation", "student"}},
{2, new Dictionary<string, string>
{{"name", "bob"},
{"age", "40"}
{"occupation", "lawyer"}}, //this is where it's different
{3, new Dictionary<string, string>
{{"name", "cameron"},
{"age", "32"}
{"occupation", "teacher"}},
}
我想获得第三个包含更新的字典。它可以成为整个第一层,或分解成第二层。下面的两个例子都适用于我。
Dictionary<int, Dictionary<string, string>> UpdateDictionary1 = new Dictionary
{
{2, new Dictionary<string, string>
{{"name", "bob"},
{"age", "40"}
{"occupation", "lawyer"}} //this is where it's different
}
Dictionary<int, Dictionary<string, string>> UpdateDictionary2 = new Dictionary
{
{2, new Dictionary<string, string>
{{"occupation", "lawyer"}}
}
我试图从这个帖子How to compare two Dictionaries in C#的答案,但我得到了UpdateDictionary结果仍包含NewDictionary所有数据。我的预期产出应该是UpdatesDictionary.Count == 1
。我试过Where
答案和Except
答案,他们都没有按照我想要的那样工作。
UpdateDictionary = OriginalDictionary.Where(entry => NewDictionary[entry.Key] != entry.Value).ToDictionary(entry => entry.Key, entry => entry.Value);
UpdateDictionary = OriginalDictionary.Except(NewDictionary).ToDictionary(x => x.Key, x => x.Value);
有没有其他方法我应该这样做?
谢谢!
谢谢你的答复。编辑值的数目仍然没有出来。我仍然得到更多的更新比应该是:/ – sora0419
@ sora0419对不起,错过了不在那里;它得到所有的平等字典。 – Servy
我仍然得到一个更大数量的计数,所以我试图使用Trim()来摆脱我不知道的额外空间,并最终让它正常工作(至少现在我没有看到任何问题) 。非常感谢! – sora0419