C# 如何比较两本词典<;字符串,int>;查找是否有任何值已更改?
我有两本字典C# 如何比较两本词典<;字符串,int>;查找是否有任何值已更改?,c#,C#,我有两本字典PersonalizePaientChartDictionary和PersonalizePaientChartDictionaryorOriginal。两者具有相同的键,但值可以不同。我想知道一个键的值是否有差异。我提出了以下函数。有没有更好的办法?我正在使用.NET4.0 void CompareOriginalValues() { foreach (KeyValuePair<string, int> Origkvp in personalizePatientC
PersonalizePaientChartDictionary
和PersonalizePaientChartDictionaryorOriginal
。两者具有相同的键,但值可以不同。我想知道一个键的值是否有差异。我提出了以下函数。有没有更好的办法?我正在使用.NET4.0
void CompareOriginalValues()
{
foreach (KeyValuePair<string, int> Origkvp in personalizePatientChartDictionaryOriginal)
{
foreach (KeyValuePair<string, int> kvp in personalizePatientChartDictionary)
{
if ((Origkvp.Key == kvp.Key) && (Origkvp.Value != kvp.Value))
{
hasDictionaryChanged = true;
break;
}
}
if (hasDictionaryChanged)
{
break;
}
}
}
void CompareOriginalValues()
{
foreach(PersonalizePaientChartDictionaryorOriginal中的键值对Origkvp)
{
foreach(personalizePatientChartDictionary中的KeyValuePair kvp)
{
if((Origkvp.Key==kvp.Key)&&(Origkvp.Value!=kvp.Value))
{
hasDictionaryChanged=true;
打破
}
}
如果(hasDictionaryChanged)
{
打破
}
}
}
看起来不错。但最好返回hasdirectionarychanged以指示它已更改
foreach (var kvp in personalizePatientChartDictionaryOriginal)
{
int value;
if (personalizePatientChartDictionary.TryGetValue(kvp.Key, out value))
{
if (kvp.Value != value)
{
hasDictionaryChanged = true;
break;
}
}
}
请注意,此代码(以及您的原始代码)不会检测一个字典中是否存在另一个字典中不存在的键。它只检查与第一个字典中的特定键关联的值是否与第二个字典中的同一个键关联,但前提是该键实际存在于第二个字典中。可以编写自己版本的dictionary类,继承自dictionary和IComparable 然后你可以做
dictionary1.比较(dictionary2)代码>
这是一个很好的iComparable接口资源
您可以使用LINQ(别忘了在您的使用中添加“using System.LINQ”)
有关如何使用LINQ的更多信息,请参阅。如果您需要,这也适用于字典中存储的复杂对象。不是关于.NET的好资源,因为它是关于.NET 1.x的。ishasDictionaryChanged是一个页面级属性。这就是它没有被返回的原因。哦。。。然后,您应该将if语句放在hasDictionaryChanged=true之后;如果第一个字典中存在第二个字典中不存在的键,则该值将计算为true。这与问题中的逻辑不同,问题中只检测两个字典中存在的键的值的差异。(这个逻辑是否是OP真正想要的是另一回事!)问题指出,两个字典都包含相同的键,所以您不需要检查第二个字典中是否确实存在键dictionary@Andriy:说得好。做出这样的假设可能更好(如果碰巧缺少一个键,那么抛出一个异常),但是OP的原始代码没有这样做,我试图保持原始逻辑,只是提高了它的性能。
bool hasDictionaryChanged = personalizePatientChartDictionaryOriginal.Except(personalizePatientChartDictionary).Count() > 0;