2016-06-06 4 views
0

Ich habe diesen Code, um einen Wert (Integer-Array) aus einem Wörterbuch abrufen Dann inkrementieren eines der Elemente innerhalb der Ganzzahl-Array basierend auf der if-Anweisung es ist ..mit TryGetValue von Schlüssel und Hinzufügen funktioniert nicht als intent

 Dictionary<string, int[]> ResultDic = new Dictionary<string, int[]>(); 
     if (TeamOnePoint > TeamTwoPoint) 
     { 
      ResultDic.TryGetValue(TeamOneResult, out OutOfDic); 
      OutOfDic[0]++; 
      OutOfDic[1]++; 
      ////ResultDic.Remove(TeamOneResult); 
      ////ResultDic.Add(TeamOneResult, OutOfDic); 
      ResultDic[TeamOneResult] = OutOfDic;; 
      ResultDic.TryGetValue(TeamTwoResult, out OutOfDic); 
      OutOfDic[0]++; 
      OutOfDic[2]++; 
      ////ResultDic.Remove(TeamTwoResult); 
      ////ResultDic.Add(TeamTwoResult, OutOfDic); 
      ResultDic[TeamTwoResult] = OutOfDic; 
      } 

nun das Problem, das ich habe ist, dass evertime ich das modifizierte OutOfDic Array zurück in das Wörterbuch in den Wert Teil lesen, wo ich den Schlüssel angegeben, wird jeder Wert im Wörterbuch als auch modifiziert, und zwar nicht nur den Schlüssel I angegeben. Der kommentierte Teil liefert das gleiche Ergebnis wie der nicht kommentierte Teil. Wie behebe ich dieses Problem, um den Wert nur dem angegebenen Schlüssel hinzuzufügen?

+3

_ "wieder in" _? Du meinst _Write zurück in_? Sie erhöhen auch zwei Eingänge, nicht einen. Warum verwenden Sie 'TryGetValue' auch, wenn Sie sicher sind, dass der Schlüssel existiert? Sie behandeln nicht den Fall, dass ein Schlüssel nicht vorhanden ist. –

+0

Danke für die Antwort. Ich lese die Teams (zB 6 Teams) in den Schlüssel des Arrays und mache den Wert (int [] TheArray) 0 .. Dann spielen die Teams. und immer wenn ein Team spielt. (Team One Win. Team Two verloren). Dann müssen die TeamOne P (Play) und W (Win) erhöht werden. TeamTwo P und L (Lost) müssen erhöht werden. deshalb tryGetValue. Ich möchte den Wert des gespielten Teams ermitteln und diese Werte erhöhen. dann schreibe (gemeint ist, schreibe) sie zu spezifizierten Wert where Schlüssel == TeamOne –

Antwort

2

Das von Ihnen beschriebene Verhalten ist nur möglich, wenn Sie dem Wörterbuch das gleiche Array mehrmals hinzugefügt haben. Da Arrays reference types sind, wird jede Änderung alle Werte im Dictionay beeinflussen.

Anstatt dies zu tun (zum Beispiel):

Dictionary<string, int[]> ResultDic = new Dictionary<string, int[]>(); 
int[] array = { 1, 2, 3, 4, 5 }; 
ResultDic.Add("TeamOne", array); 
ResultDic.Add("TeamTwo", array); 

Sie dies tun sollen:

int[] array = { 1, 2, 3, 4, 5 }; 
ResultDic.Add("TeamOne", array); 
array = new int[] { 1, 2, 3, 4, 5 }; 
ResultDic.Add("TeamTwo", array); 

Beachten Sie, dass es nicht notwendig ist, das Array in das Wörterbuch für die gleichen neu zuweisen Grund (es ist ein Referenztyp). So können Sie diese Zeilen entfernen:

ResultDic[TeamOneResult] = OutOfDic;; 
// .... 
ResultDic[TeamTwoResult] = OutOfDic; 
+1

Vielleicht ist es bemerkenswert, dass aus dem gleichen Grund das Schlüssel-Wert auf das modifizierte Array nach der Änderung nicht erforderlich ist. –

Verwandte Themen