如何比较字典键中的字符串数组

时间:2015-09-28 08:01:48

标签: c# winforms

我创建了这样的字典:

Dictionary<string, int> dic = new Dictionary<string, int>();

我有一个像这样的字符串数组:

string[] str = new string[]{"str1","str2","str3"}

现在我想检查dic键是否包含str的所有元素而不使用循环。做这个的最好方式是什么?。感谢。

2 个答案:

答案 0 :(得分:2)

如果您想知道所有词典是否包含所有键:

bool allContainsAll = dic.All(dictonary => str.All(dictonary.ContainsKey));

如果您想知道字符串是否在任何字典键中:

var allDictKeys = new HashSet<string>(dic.SelectMany(d => d.Keys));
bool allContainsAll = str.All(allDictKeys.Contains);

请注意,LINQ也使用循环,你只是看不到它们。

答案 1 :(得分:2)

这是linq的解决方案,至少没有可见的循环,但内部linq使用循环

Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("str1", 1);
dic.Add("str2", 2);
dic.Add("str3", 3);

string[] str = new string[] { "str1", "str2", "str3" };
bool ContainsAll = str.All(x => dic.ContainsKey(x)); //true