如何在C#中比较两个哈希表值

时间:2015-02-13 05:08:18

标签: c# hashtable

我需要比较2个哈希表值。我可以分别使用Containskey和ConatinsValue方法比较键和值。是否可以在单个语句中比较键和值。需要检查给定的键值对是否以有效的方式存在于哈希表中。有谁能建议解决这个问题? 提前致谢

3 个答案:

答案 0 :(得分:2)

没有。因为您首先需要确定两个列表中是否存在相同的密钥。然后,如果两者都想要比较实际值。这涉及两个步骤。即使您找到了一种使用方法,但在封面下它将执行两个步骤。根据您的问题,我认为您的意思是您有两个单独的哈希表实例。

另一方面,如果您可以保证每个可能的值都生成一个唯一的哈希值,那么表中哈希值的存在意味着它的值与您想要比较的值相同。然后,您只需要确定密钥是否在表中,并且比较值的额外步骤是多余的。

答案 1 :(得分:1)

你所要求的并不是很清楚。是否要检查某些键值对是否位于两个 Hashtable个对象中?或者您是否有一对Hashtable对象要检查其在另一个对象中的存在?

除非您为此目的编写自己的帮助方法,否则第一个不可能在单个语句中执行。也就是说,这样做是个好主意,应该正确编写辅助方法,即有效地访问数据。

正确实现此功能的第一步是修复代码,使其使用Dictionary<TKey, TValue>代替Hashtable。如果没有实际的代码,就不可能知道你用于TKeyTValue的类型,所以这里有一个适用于任何类型的辅助方法的例子:

static bool KeyValuePairExistsInBoth<TKey, TValue>(Dictionary<TKey, TValue> dict1, Dictionary<TKey, TValue> dict2, TKey key, TValue value)
{
    TValue value1, value2;

    if (!dict1.TryGetValue(key, out value1) || !dict2.TryGetValue(key, out value2))
    {
        return false;
    }

    return value.Equals(value1) && value.Equals(value2);
}

这里的重要方面是使用TryGetValue()方法,它允许您检查密钥的存在并在一次调用中检索该密钥的值。

如果您需要做的就是在第二个集合中检查是否存在您从第一个集合中检索到的键值对,那么您可以直接在第二个集合中使用TryGetValue()方法,然后将返回的值与第一个集合中的值进行比较。与上面的内容非常相似,但当然你不需要检查第一个系列是否存在,因为这是你首先得到它的地方。

答案 2 :(得分:-1)

这应该这样做:

hash1[key] == hash2[key]

如果密钥具有相同的值,或者两者都缺少密钥,则为真。