2015-09-28 45 views
-2

比较字符串数组我创建的字典是这样的:如何内辞典键

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

而且我有一个字符串数组是这样的:

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

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

+2

_“而不使用循环” _不可能的,甚至LINQ使用循环。另外,这是一个'Dictionary []',你想知道一个字典是否包含所有键,如果所有字典都包含所有键或者所有字典都包含所有键但总共包含所有键(第一个包含“str1”,第二个' str2'等)? –

+0

接受的答案does'n编译,因为字典is'n一个嵌套列表 – Byyo

+0

@Byyo TimSchmelter是正确的,OP改变了问题 – fubo

回答

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还使用循环,你只是看不到它们。

+0

什么是“D”和“S”? – AJHope

+0

@AJHope:这是[lambda表达式](https://msdn.microsoft.com/en-us/library/bb397687.aspx)。 'd'和's'是投影对象的变量。在这种情况下,字典和字符串。我已经重命名了字典变量并删除了's',因为您可以直接在这种情况下传递方法。 –

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 
+0

什么是'x'? – AJHope

+0

这是lambda表示法https://msdn.microsoft.com/en-gb/library/bb397687.aspx – fubo