确定Dictionary是否包含所有一组键

Spe*_*r R 16 .net c# linq

我试图找出确定Dictionary<string, string>对象是否包含所有一组string对象作为键的最佳方法.

我可能没有任何意义,所以这里有一些使用一组确定字符串的示例代码:

public static bool ContainsKeys(this Dictionary<string, string> dictionary)
{
  return dictionary.ContainsKey("fname") && dictionary.ContainsKey("lname") && dictionary.ContainsKey("address1") &&
         dictionary.ContainsKey("city") && dictionary.ContainsKey("state") && dictionary.ContainsKey("zip");
}
Run Code Online (Sandbox Code Playgroud)

这里的想法是接受任意一组字符串,keys并检查Dictionary<string, string>对象的键是否包含所有字符串keys.

我试图沿着LINQ路走下去:

public static bool ContainsKeys(this Dictionary<string, string> dictionary, string[] keys)
{
  var query = from entry in dictionary
              where keys.Contains(entry.Key)
              select entry;

  return query.Any();
}
Run Code Online (Sandbox Code Playgroud)

我不知道我是否在正确的道路上 - 我认为如果我想知道是否dictionary包含任何这些字符串作为键,这可能会有效.

Ant*_*ram 27

这样的事情应该符合你的要求.当然,在你的论点周围应用适当的验证.

return keys.Any() 
    && keys.All(key => dictionary.ContainsKey(key));
Run Code Online (Sandbox Code Playgroud)

注意:我包含Any因为如果源序列(键)实际为空,All则返回true.如果你不介意这一点,那就消除使用了Any.

  • 对于那些喜欢缩短版本的人:`return keys.Any() &amp;&amp; keys.All(dictionary.ContainsKey);` (2认同)

yoo*_*er8 5

这可以非常简单地使用All扩展方法来完成。

return keys.All(k => dictionary.ContainsKey(k));
Run Code Online (Sandbox Code Playgroud)

这将检查给定谓词 ( dictionary.ContainsKey(k)) 对于给定数组中的所有键是否为真。