如何检查某个键的字典是否包含值?

时间:2015-12-25 19:50:46

标签: c# .net dictionary

因此,如果我有一个字典,每个键可以占用更多的那个值(即Dictionary < string , Hashset < string >>),现在我想检查dic [key a]是否包含一个值,例如“b”中的值dic [a]的hashset?怎么做?

3 个答案:

答案 0 :(得分:3)

我认为测试存在的最有效方法是结构和检查函数是否定义如下:

// extension method on IDictionary<TKey, HashSet<TValue>> can be used
public static bool ContainsKeyValue<TKey, TValue>(IDictionary<TKey, HashSet<TValue>> dictOfHash, TKey key, TValue value)
{
    if (!dictOfHash.ContainsKey(key))
        return false;

    return dictOfHash[key].Contains(value);
}

var dict = new Dictionary<int, HashSet<String>>()
{
    { 1, new HashSet<String>() { "one", "two", "three"} },
    { 2, new HashSet<String>() { "ten", "eleven", "twelve"} } 
};

bool exists = ContainsKeyValue(dict, 1, "two");
exists = ContainsKeyValue(dict, 1, null);
exists = ContainsKeyValue(dict, 2, "one");
exists = ContainsKeyValue(dict, 3, null);

存在性检查的复杂度应为O(1),因为Dictionary<,>Hashset<>的get / set复杂度均为O(1)。

答案 1 :(得分:1)

您可以使用扩展方法

public static bool Contains<Tkey, TValue>(this Dictionary<Tkey, IEnumerable<TValue>> dic, Tkey key, TValue val)
{
    if (dic.ContainsKey(key))
        return dic[key].Contains(val);
    return false;
}

答案 2 :(得分:1)

试用IDictionary<>.TryGetValue,保存一个表格查找:

public static bool Contains<TKey, TValue>(this IDictionary<TKey, HashSet<TValue>> dictionary, TKey key, TValue value)
{
    var hashSet; 
    if(dictionary.TryGetValue(key, out hashSet))
    {
       return hashSet.Contains(value);
    } 
    else 
    {
          return false;
    }         
}