2016-09-02 8 views
0

Ich habe zwei Wörterbücher und ich möchte es gegeneinander vergleichen und sie sind vom Typ Wörterbuch>Vergleicht man zwei Wörterbücher in C# mit string, Dictionary <string, object >>

Ich habe versucht, eine foreach-Schleife, aber es funktioniert nicht genau wie gewünscht. Was ist der beste Weg, um es zu tun?

foreach (KeyValuePair<string, Dictionary<string, object>> entry1 in dict1) 
{ 
    foreach (KeyValuePair<string, Dictionary<string, object>> entry2 in dict2) 
    { 
     if (entry1.key = entry2.key) 
     { 
      if (entry1.Value["Number"]==entry2.Value["Number"]) 
      { 
       Console.WriteLine("Comparison successful") 
      } 
     } 
    } 
} 
+0

Meine Frage ist es eine einfachere Art und Weise, es zu tun? – Shan

+0

Möchten Sie herausfinden, ob zwei Wörterbücher die gleichen Werte enthalten? – Kinetic

+0

Ja .. Ich möchte wissen, ob zwei Dictionaries die gleichen Schlüssel und dann die gleichen Werte – Shan

Antwort

1
public static Boolean CompareDictionary(Dictionary<string, object> D1, Dictionary<string, object> D2) 
{ 
    if (D1 == null && D2 == null) return true; 
    else if (D1 == null || D2 == null) return false; 

    if (D1.Count != D2.Count) return false;  
    if (D1.Keys.Except(D2.Keys).Any()) return false; 
    if (D2.Keys.Except(D1.Keys).Any()) return false; 

    foreach (string Key in D1.Keys) 
    { 
     if (!D2.ContainsKey(Key)) return false; 
     if (D1[Key] != D2[Key]) return false; 
    } 
    return true; 
} 
+0

Dies funktioniert auch nicht für mich..als ich die Werte des einen Schlüssels aus einem Wörterbuch mit einem anderen Schlüssel aus einem anderen Wörterbuch vergleichen muss – Shan

+0

@Shan: das ist, was das zweite 'if' innerhalb der 'foreach'-Schleife tut. – siride

0

Hier ist sie:

private static bool Check2DictionariesAreEqual(Dictionary<string, object> entry1, Dictionary<string, object> entry2) 
{ 
    if(entry1 == null && entry2 == null) 
    { 
     return true; 
    } 
    else if(entry1 == null || entry2 == null) 
    { 
     return false; 
    } 

    if(entry1.Count != entry2.Count) 
    { 
     return false; 
    } 

    bool result = true; 

    foreach (string key in entry1.Keys) 
    { 
     // Check Key 
     result &= entry2.ContainsKey(key); 

     if (!result) // Quick Break 
     { 
      break; 
     } 

     // Check Value 
     result &= entry2[key] == entry1[key]; 

     if(!result) // Quick Break 
     { 
      break; 
     } 
    } 

    return result; 
} 
Verwandte Themen