2016-05-23 6 views
0

I Ergebnisse aus verschachtelter Wörterbuchdurch verschachtelten Wörterbuch Iterieren funktioniert nicht in C#

var variations_hash = new Dictionary<string, Dictionary<string, List<string>>>(); 

zu drucken versuchen Aber es wirft einigen zufälligen Fehler

using System; 
using System.Net; 
using System.IO; 
using System.Text.RegularExpressions; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading; 

class Program 
{ 
    static void Main() 
    { 
     var variations_hash = new Dictionary<string, Dictionary<string, List<string>>>(); 
     var variations = new Dictionary<string, List<string>>(); 

     variations["available"] = new List<string> { "hi" }; 
     var stores = new[] { "s", "m", "xl", "xxl", "xxxl", "v" }; 
     string color_trans = "blue"; 
     foreach (var sto in stores) 
     { 
      variations_hash[sto] = variations; 
     } 

     foreach(var job in variations_hash.Key()) 
     { 
      foreach (var innerDict in variations_hash[key].Select(k => k.Value)) 
      { 
       Console.Write(innerDict); 
      } 
     } 
     Console.ReadLine(); 
    } 
} 

Fehler:

Error CS1061 'Dictionary>>' does not contain a definition for 'Key' and no extension method 'Key' accepting a first argument of type 'Dictionary>>' could be found (are you missing a using directive or an assembly reference?)
ConsoleApplication1 c:\users\administrator\documents\visual studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 29

Error CS0103 The name 'key' does not exist in the current context ConsoleApplication1 c:\users\administrator\documents\visual studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 31

Warning CS0219 The variable 'color_trans' is assigned but its value is never used
ConsoleApplication1 c:\users\administrator\documents\visual studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 20

Wie man den gesamten Inhalt des geschachtelten Wörterbuchs wiederholt und druckt?

+0

Verwenden Sie '.Keys' anstelle von' variations_hash.Key() ' – Pikoh

+0

Wie möchten Sie es überhaupt drucken? Was ist die erwartete Ausgabe, sollte sie auch die Schlüssel enthalten? –

+3

Das sind keine "zufälligen Fehler" überhaupt. Diese Fehlermeldungen sind sehr spezifisch und scheinen mir ziemlich klar zu sein. Was verstehst du nicht darüber, was hast du von der 'Key()' Methode erwartet? Auf welche Variable haben Sie sich in 'variations_hash [key]' bezogen? –

Antwort

2

Obwohl Sie das Problem beheben könnte Key() mit Keys proprty durch Ersetzen, wäre dies nicht der optimale Weg, ein Wörterbuch von Iterieren, weil Sie müssten abrufen das Objekt für jeden Schlüssel in der Schleife.

Es ist effizienter Schlüssel-Wert-Paare iterieren, wie folgt aus:

foreach(var vHash in variations_hash) { 
    Console.WriteLine("variations_hash key = {0}", vHash.Key); 
    foreach (var inner in vHash.Value) { 
     // Print inner dictionary key followed by comma-separated list 
     Console.WriteLine(
      "--- {0}: {1}" 
     , inner.Key 
     , string.Join(", ", inner.Value) 
     ); 
    } 
} 

Beachten Sie, wie jede Schleife Sie den Schlüssel des Wörterbuchs, um nicht nur Zugriff auf Inhalte erhalten iteriert werden (dh vHash.Key und inner.Key), sondern auch auf den Wert, der diesem Schlüssel zugeordnet ist.

0

Es sollte variations_hash.Keys

auch verschachtelt Wörterbuch-Wert ist ein List sein, so verwenden SelectMany die Struktur zu glätten.

foreach(var job in variations_hash.Keys) 
{ 
    foreach (var innerDict in variations_hash[key].SelectMany(k => k.Value)) 
    { 
     Console.Write(innerDict); 
    } 
} 

Above Code könnte Kompilierung Probleme beheben und druckt alle Wörterbuch Werte verschachtelt, aber das verschachtelte Wörterbuch in der richtigen Format drucken Sie unter Code verwenden können.

foreach(var kv in variations_hash) 
{ 
    foreach (var nestedKv in kv.Values) 
    { 
     Console.Write("Key {0}- Values{1}", nestedKv.Key, string.Join(",", nestedKv.Value)); 
    } 
} 

und gleiche Sache mit Linq

var lines = variations_hash.SelectMany(x=>x.Values) 
          .ToList(). 
          .ForEach(kv => Console.WriteLine("Key {0}- Values{1}", kv.Key, string.Join(",", kv.Value))); 
+1

Sollte die Schleifenvariable nicht 'Schlüssel' statt' Job' sein? –

+0

Im Idealfall ja, da OP Jobvariable verwendet habe ich dachte, es hat eine gewisse Bedeutung :-) @YacoubMassad –

Verwandte Themen