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。这段代码将抛出一个错误,因为我的值是一个字符串而不是一组字符串。我听不懂你说的话,你能重新格式化你的句子吗?不,很抱歉它起作用了。乍一看,我没有看到“可枚举的”。谢谢。如果答案是你的解决方案,别忘了把它标记为你问题的解决方案。