2016-09-02 26 views
0

私は2つの辞書を持っていると私はお互いに対してそれを比較すると、彼らはタイプ辞書である><文字列、オブジェクト>>

私は、foreachループを使用してみましたが、それ希望どおりにはうまくいかないでしょう。それについては何が最良の方法ですか?

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

私の質問は、それを行うには任意の簡単な方法がありますか? – Shan

+0

2つの辞書に同じ値が含まれているかどうかを確認しようとしていますか? – Kinetic

+0

はい..私は2つの辞書に同じキーと同じ値が入っているかどうか知りたい – Shan

答えて

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

これは私にとってはうまくいきません。別の辞書の別のキーと1つの辞書の1つのキーの値を比較する必要があります。 – Shan

+0

@Shan:これは 'foreach'ループの中で2番目の' if'と同じです。 – siride

0

ここにある:

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; 
} 
関連する問題