2012-04-06 11 views
0

Lets sagen, ich habe 2D-Array von Wörterbüchern bekam:2D-Array von Wörterbüchern - Kopieren

public Dictionary<int, string>[,] mat = new Dictionary<int, string>[3, 5] 
{ 
    { new Dictionary<int, string>(), new Dictionary<int, string>(), new Dictionary<int, string>() }, 
    { new Dictionary<int, string>(), new Dictionary<int, string>(), new Dictionary<int, string>() }, 
    { new Dictionary<int, string>(), new Dictionary<int, string>(), new Dictionary<int, string>() }, 
    { new Dictionary<int, string>(), new Dictionary<int, string>(), new Dictionary<int, string>() },   
    { new Dictionary<int, string>(), new Dictionary<int, string>(), new Dictionary<int, string>() } 
} 

Und ich muss diese in eine andere kopieren. Ich habe alles versucht.
Etwas wie:

matNew = mat; 

Aber immer noch, wenn ich die erste Änderung, wird es automatisch die zweite ändern.
Ich weiß wirklich nicht, wie man das macht.

+0

Man ändert sich und das andere auch, also sagen Sie, Sie wollen stattdessen eine tiefe Kopie? – payo

+0

@payo - Ja, genau. –

+0

Array ist ein Referenztyp; "mat" ist nur eine Referenz auf die Instanz, und "matNew = mat" kopiert die Referenz, nicht das eigentliche Array. Versuchen Sie, eine Kopie des Arrays oder eine Kopie des Arrays und aller darin enthaltenen Wörterbücher zu erstellen? –

Antwort

2

Ich nehme an, Sie möchten eine tiefe Kopie?

var matNew = new Dictionary<int, string>[mat.GetLength(0), mat.GetLength(1)]; 
for (int i = 0; i < mat.GetLength(0); ++i) 
    for (int j = 0; j < mat.GetLength(1); ++j) 
     matNew[i, j] = new Dictionary<int, string>(mat[i, j]); 

Der Dictionary(IDictionary<TKey, TValue>) Konstruktor kopiert alle Elemente aus dem angegebenen Wörterbuch und ist wahrscheinlich der schnellste Weg, um einen flachen Klon eines bestehenden Wörterbuch durchzuführen. Dies ist für Ihren Fall geeignet, da Ihre Schlüssel und Werte beide unveränderlich sind (int und string).

Verwandte Themen