我需要检查两个类型为Dictionary<string, List<string>>
的字典是否相同。到目前为止,我有以下代码:
// dictionaries are already defined, so no parameters are required
private bool DictionariesEqual()
{
return dictionary1.SequenceEqual(dictionary2);
}
我假设这只检查键和值的顺序是否相同,但这不是我想要的,因为只有每个键和值的名称才是重要的,顺序并不重要。
有没有一种方法可以检查字典中不相等的字符串,并在找到第一个不匹配时返回false? 编辑 感谢您所有人的帮助,但值更改仍未被识别。
更具体地说,这是函数(感谢@juharr)以及我如何使用它:
private bool DictionaryContentChanged()
{
if(synonymDictionary.Count != temporaryDictionary.Count ||
synonymDictionary.Keys.Except(temporaryDictionary.Keys).Any() ||
!synonymDictionary.Join(
temporaryDictionary,
kvp => kvp.Key,
kvp => kvp.Key,
(kvp1, kvp2) => new
{
l1 = kvp1.Value,
l2 = kvp2.Value
})
.All(a => a.l1.Count == a.l2.Count && !a.l1.Except(a.l2).Any()))
return true;
return false;
{
我将它放入一个更新函数中,该函数以一定的时间间隔重复检查变化:
void Update(int interval)
{
while(!this.IsDisposed)
{
Set.Timer(interval);
if(DictionaryContentChanged())
{
MessageBox.Show("Changes detected");
}
else
{
// move on
}
}
}
当我添加、删除或更改一个值时,什么都不会发生。如果一个键被改变或key.Count被改变,则消息框才会出现。这可能与比较字典的函数有关吗?
请记住,每个KeyValuePair的值表示一个通用列表。