2009-10-29 162 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) 
{ 
    ... 
}