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

C# 如何检查某个键的字典是否包含值?,c#,.net,dictionary,C#,.net,Dictionary,因此,如果我有一个字典,每个键可以接受多个值(即dictionary

因此,如果我有一个字典,每个键可以接受多个值(即
dictionary
),现在我想检查dic[key a]是否在dic[a]的Hashset中包含一个值,例如“b”?如何做到这一点?

您可以使用扩展方法

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;
}
公共静态布尔包含(此字典dic、Tkey、TValue val)
{
if(dic.ContainsKey(钥匙))
返回dic[key]。包含(val);
返回false;
}

我认为测试存在性的最有效方法是,如果结构和检查功能定义如下:

// 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);
//可以使用IDictionary上的扩展方法
公共静态bool包含skeyvalue(IDictionary dictOfHash、TKey、TValue值)
{
如果(!dictOfHash.ContainsKey(键))
返回false;
返回dictOfHash[key]。包含(值);
}
var dict=新字典()
{
{1,新的HashSet(){“一”,“二”,“三”},
{2,新的HashSet(){“十”,“十一”,“十二”}
};
bool exists=ContainsKeyValue(dict,1,“two”);
exists=ContainsKeyValue(dict,1,null);
exists=ContainsKeyValue(dict,2,“一”);
exists=ContainsKeyValue(dict,3,null);
存在性检查的复杂性应为O(1),因为
字典和
哈希集的get/set复杂性均为O(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;
    }         
}
公共静态bool包含(此IDictionary dictionary、TKey、TValue)
{
var散列集;
if(dictionary.TryGetValue(key,out hashSet))
{
返回hashSet.Contains(值);
} 
其他的
{
返回false;
}         
}

很抱歉,我想我忘了添加,它在dic[a]的哈希集中搜索这个字符串b。这段代码将抛出一个错误,因为我的值是一个字符串而不是一组字符串。我听不懂你说的话,你能重新格式化你的句子吗?不,很抱歉它起作用了。乍一看,我没有看到“可枚举的”。谢谢。如果答案是你的解决方案,别忘了把它标记为你问题的解决方案。