2009-10-29 99 views
2

我有一本詞典的字典,我似乎無法弄清楚如何在內部字典中做一個foreach循環。使用foreach枚舉內部字典

我的收藏:

Dictionary<int, Dictionary<int, User>> 

到目前爲止,我有:

foreach(User user in myDic[someKey]??) 
+1

但是你到底想做什麼?遍歷所有字典中的所有元素? – Gacek 2009-10-29 13:19:58

回答

6

嵌套的foreach

foreach (var keyValue in myDic){ 
    foreach (var user in keyValue.Value){ 
    .... 
    } 
} 

還是有點LINQ

 foreach (User User in myDic.SelectMany(i => i.Value).Select(kv=>kv.Value)) 
     { 

     } 

通過用戶名

 foreach (User User in myDic.SelectMany(i => i.Value) 
            .Select(kv=>kv.Value) 
            .OrderBy(u=>u.UserName)) 
     { 

     } 
+0

如何訂購我的User.Username的勝利? – mrblah 2009-10-29 13:25:58

+0

+1很好。 – AnthonyWJones 2009-10-29 13:37:57

+0

太棒了!爲什麼.selectmany然後選擇? – mrblah 2009-10-29 14:53:03

4
foreach (KeyValuePair<int, Dictionary<int, User>> users in myDic) { 
    foreach (KeyValuePair<int, User> user in users.Value) { 
     ... 
    } 
} 
+0

myDic [someKey]已經返回類型字典的值。我認爲你應該拿出「[someKey]」。 – 2009-10-29 13:21:59

+0

使用myDic [someKey]。值可能會更乾淨。 – Brian 2009-10-29 13:23:55

0
//given: Dictionary<int, Dictionary<int, User>> myDic 

foreach(KeyValuePair<int, Dictionary<int, User>> kvp in myDic) { 
    foreach(KeyValuePair<int, User> kvpUser in kvp.Value) { 
     User u = kvpUser.Value; 
    } 
} 
1

您是否在尋找這個命令?

var myDic = new Dictionary<int, Dictionary<int, string>>(); 
    foreach(var item in myDic) 
     foreach (var subItem in item.Value) 
     { 
      Display(
       subItem.Key, // int 
       subItem.Value); // User 
     } 
2
foreach(User user in myDic[someKey].Values) 

是字面回答你的問題;儘管我通常會推薦使用TryGet方法,除非您是某些someKey位於字典的Keys集合中。

0
var users = myDic.Select(kvp => kvp.Value).SelectMany(dic => dic.Values); 
foreach(User user in users) 
{ 
    ... 
}