2013-07-26 5 views
0

J'ai une collection de données qui ressemblent à ceci:Extraction et valeurs clés dans le dictionnaire avec dans le dictionnaire en C#

Dictionary<string, Dictionary<string,IEnumerable<AGString>>> Data = new Dictionary<string, Dictionary<string,IEnumerable<AGString>>>(); 

Dictionary<string,IEnumerable<AGString>> stdData = new Dictionary<string,IEnumerable<AGString>>(); 

plus tard, je dois extraire ces données et de les placer dans une autre structure de données, par exemple I ont fait des données comme suit:

stdData.Add(item.ObjectName,item.Contents); // this creates the inner dictionary 
Data.Add(collection,stdData); //This creates the final Data dictionary 

J'ai essayé d'extraire les informations en utilisant Data.Key, Data.Keys, mais je ne peux pas extraire les données. Une idée?

+3

« tout ce que je fais ne fonctionne pas » nous donne très peu information. Nous ne savons pas ce que vous avez essayé, ce que vous attendiez, ou ce qui s'est réellement passé. S'il vous plaît voir http://tinyurl.com/so-list –

+0

J'ai essayé des paires de clés et de valeurs pour extraire les données de ce dictionnaire dans la structure du dictionnaire. Mais, je ne reçois pas les données. Je veux juste savoir quelle est l'approche générale dans cette situation. – user843681

+0

Puis-je acheter une voyelle? –

Répondre

0

Ainsi, la façon élégante de résoudre ce problème est d'utiliser LINQ, et vous n'avez pas besoin d'acheter une voyelle . Cette structure contient un dictionnaire interne et un dictionnaire externe. Nous pouvons y accéder en Linq comme suit:

var flatKeyValue = from outer in Data 
           from inner in outer.Value 
           select new 
           { 
            NewKey = outer.Key, 
            NewVal1 = inner.Key, 
            NewVal2 = inner.Value 
           }; 

Donc, maintenant nous pouvons accéder à nos données bien-aimés par une simple boucle foreach:

foreach (var item in flatKeyValue) 
{ 
    Console.WriteLine(item.NewKey); // you can try NewVal1, NewVal2 quite simply here 
} 
+0

Eh bien, je l'ai regardé. J'aime Linq quand il me donne un morceau de code plus compréhensible, loin d'être sûr que cela se qualifie, et je reste méfiant de la quête de l'élégance ... –

0

Absolument aucune idée de ce que vous essayez de faire, mais

Étant donné

Dictionary<string, Dictionary<string,IEnumerable<AGString>>> Data = new Dictionary<string, Dictionary<string,IEnumerable<AGString>>>(); 

foreach(string k1 in Data.Keys) 
{ 
    foreach(string k2 in Data[k1].Keys) 
    { 
     foreach(AGString ag in Data[k1][k2]) 
     { 
     // do something with k1, k2 and ag 
     } 
    } 
} 
+0

Regardez ma solution. – user843681

Questions connexes