2009-10-29 5 views
2

J'ai un dictionnaire de dictionnaires, et je n'arrive pas à comprendre comment faire une boucle foreach dans le dictionnaire interne.Enumérer le dictionnaire interne en utilisant foreach

Ma collection:

Dictionary<int, Dictionary<int, User>> 

Jusqu'à présent, j'ai:

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

Mais que voulez-vous exactement faire? Boucle à travers tous les éléments dans tous les dictionnaires? – Gacek

Répondre

6

foreach imbriquées

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

ou un peu LINQ

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

     } 

commandé par UserName

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

     } 
+0

Que diriez-vous de commander mon User.Username pour la victoire? – mrblah

+0

+1 Bien fait. – AnthonyWJones

+0

Super! pourquoi le .selectmany puis .select? – mrblah

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

myDic [someKey] renvoie déjà une valeur de type Dictionary . Je pense que vous devriez sortir le "[someKey]". –

+0

L'utilisation de myDic [somekey] .Values ​​serait probablement plus propre. – Brian

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

Vous cherchez cela?

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) 

La réponse est littérale à votre question; si je recommande généralement l'utilisation de la méthode TryGet sauf si vous êtes certain que someKey est dans la collection Keys de votre dictionnaire.

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