2014-02-25 15 views
0

我有一個帶有字符作爲鍵和堆棧值的字典。我想檢查所有的堆棧是空的。對C#字典中的每個值應用布爾測試

var groupStacks = new Dictionary<char, Stack<int>>(); 

groupStacks.Add('(', new Stack<int>());//parentheses stack 
groupStacks.Add('{', new Stack<int>());//braces stack 
groupStacks.Add('\'', new Stack<int>());//single quotes stack 
groupStacks.Add('"', new Stack<int>());//double quotes stack 
groupStacks.Add('[', new Stack<int>());//brackets stack 

我想到的是,從邏輯上講,我需要通過字典來遍歷和檢查每個堆棧,但我不希望有寫一個for循環這一點。

回答

0

我發現字典實現IEnumerable < KeyValuePair < TKEY的,TValue >>,因此,你可以使用可枚舉的擴展方法一樣。任何和。所有,因爲這些方法接受IEnumerable的<>作爲參數。

因此,我能夠做到這一點:

if(groupStacks.All(s => !s.Value.Any())) { 
    //do something 
} 
+1

或'如果(groupStacks.Values.All(V => v.Any())!){}' – esskar

+7

字典沒有實現擴展方法,它實現了'IEnumerable ',Enumerable類中的所有擴展方法都以'IEnumerable '(不是IEnumerable)作爲第一個參數,這就是爲什麼你可以在'Dictionary'上調用所有LINQ擴展方法的原因。 –

+0

好吧,我想在技術上它不是Dictionary來實現這些方法,這是一個很好的觀點。我會編輯一下,看看我能否讓這個陳述更加正確。 – DCShannon