【问题标题】:Comparing two dictionaries in C# with string, Dictionary<string, object>>比较 C# 中的两个字典与字符串 Dictionary<string, object>>
【发布时间】:2016-09-02 01:25:07
【问题描述】:

我有两本词典,我想将它们相互比较,它们的类型是 Dictionary>

我尝试使用 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")
            }
        }
    }
}

【问题讨论】:

  • 我的问题是有更简单的方法吗?
  • 您是否试图找出两个字典是否包含相同的值?
  • 是的..我想知道两个字典是否包含相同的键和相同的值
  • 例如 key1=key2 可能相等,但我想检查 key1["number1"]=key2["number1"]

标签: c# dictionary


【解决方案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;
}

【讨论】:

  • 这对我也不起作用..因为我需要将一个字典中的一个键的值与另一个字典中的另一个键的值进行比较
  • @Shan:这就是第二个ifforeach 循环中所做的事情。
【解决方案2】:

这里是:

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;
}

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2013-01-28
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多