2016-05-17 4 views
0

I Liste sind Schleifen über einzufügen und das Wörterbuch der Liste in C# anhängen, aber es hängt nur den letzten Wert von forloopWie eine Liste eins nach der anderen (Looping über forl Loop) mit einem Wörterbuch der Liste in C#

class Crawl 
{ 
    public void SomeFunction() 
    { 
     string[] arr1 = new string[] { "one", "two", "three" }; 
     var variations_hash = new Dictionary<string, List<string>>(); 
     foreach(var item1 in arr1) 
     { 
      variations_hash["v_id_1"] = item1; 
     } 
     foreach (var job in variations_hash) 
     { 
      foreach (string jobs in job.Value) 
      { 
       Console.Write (jobs+"\n"); 
      } 
     } 
    } 
    . . . 
} 

Ergebnis:

three 

Erwartetes Ergebnis:

one 
two 
three 

Wie alle für Schleifenwerte ein von o anhängen ne (als Liste/Array) auf Wörterbuch (variations_hash)

wird voraussichtlich Struktur

{"v_id_1":"["one","two","three"]"} 
+2

, die seit nicht einmal kompilieren sollte 'item1' ist ein' 'string' und variations_hash [ "v_id_1"]' erwartet eine 'Liste ' – juharr

+0

@juharr: 'arr1' ist das Array. 'item1' ist der String, dem der' foreach' jede Rückgabe von 'arr1's Enumerator zuordnet. – AntiTcb

+0

@AlexGravely Ja, das weiß ich. Es ist der Grund 'variations_hash [" v_id_1 "] = item1;' wird nicht kompiliert, weil es einer 'Liste' '' 'zuordnet. – juharr

Antwort

0

Sie sollten

  1. Neuen Schlüsselwertpaar wenn Schlüssel nicht
  2. Hinzufügen neuer Artikel auf die entsprechenden Wert existiert wenn Schlüssel existiert

Lass uns einfach sehen, was los ist:

  1. item1 ist "one", gibt es keine Schlüssel "v_id_1" also fügen wir ein Paar: {"v_id_1", ["one"]};
  2. item1 ist "two" gibt ist ein Schlüssel "v_id_1" und wir fügen dem Wert entspricht{"v_id_1", ["one", "two"]};
  3. schließlich item1 ist "three" gibt ist ein Schlüssel "v_id_1" und erneut fügen wir dem entsprechenden Wert{"v_id_1", ["one", "two", "three"]};

Implementierung so etwas wie dies sein könnte:

string[] arr1 = new string[] { "one", "two", "three" }; 
var variations_hash = new Dictionary<string, List<string>>(); 

foreach(var item1 in arr1) { 
    List<String> list; 

    if (variations_hash.TryGetValue("v_id_1", out list)) 
    list.Add(item1); 
    else 
    variations_hash.Add("v_id_1", new List<String>() {item1}); 
} 
... 
0

Sie müssen nur das gesamte Array in das Wörterbuch zuweisen, anstatt durch sie Looping.

variations_hash["v_id_1"] = arr1.ToList(); 
+0

aber wie kann ich für eine größere Datenmenge automatisieren? – Mounarajan

+0

Sie müssten zeigen, worüber Sie sprechen. Aus der von Ihnen geposteten Frage/Code löst das Ihr Problem. –

+0

Sorry, aber das ist die erste Frage "Wie alle for-Schleife-Werte einzeln anhängen" – Mounarajan

0

ersten foreach Ihr Problem ist, werden Sie den Wert v_id_1 dreimal Einstellung statt alle drei Werte des Hinzufügens, versuchen:

string[] arr1 = new string[] { "one", "two", "three" }; 
var variations_hash = new Dictionary<string, List<string>>(); 
variations_hash["v_id_1"] = arr1.ToList(); 
foreach (var job in variations_hash) 
{ 
    foreach (string jobs in job.Value) 
    { 
     Console.Write(jobs + "\n"); 
    } 
} 
0

Anstatt Ihnen eine Arbeitscodebeispiel zu geben, dachte ich, Ich würde Sie nur in die richtige Richtung weisen.

Da Sie ein Dictionary mit einer Liste als Wert haben möchten, ist es einfacher in umgekehrter Reihenfolge zu denken. Versuchen Sie zuerst, Ihre Liste fertig zu machen, und fügen Sie diese Liste dann am Ende in das Wörterbuch ein.

Sie sollten feststellen, dass Sie den Wert Ihres Wörterbuchs mit einem einzelnen Element zurücksetzen. Da Dictionaries generisch sind, wissen sie nicht, dass Sie den neuen Wert an den Wert anhängen möchten, der derzeit dort ist. Deshalb finde ich es einfacher, rückwärts zu arbeiten und dann sollte es sich leicht einfügen.

Verwandte Themen