0

辞書の2D配列があるとしましょう:

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>() }
}

そして、私はこれを別のものにコピーする必要があります。私はすべての方法を試しました。
何かのようなもの:

matNew = mat;

しかし、それでも最初のものを変更すると、自動的に2番目のものが変更されます。
私は本当にこれを行う方法がわかりません。

4

1 に答える 1

2

ディープコピーが欲しいと思いますか?

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]);

コンストラクターは、指定されたディクショナリからすべての要素をコピーします。Dictionary(IDictionary<TKey, TValue>)これは、既存のディクショナリの浅いクローンを実行するためのおそらく最速の方法です。intキーと値はどちらも不変(および)であるため、これはケースに適していますstring

于 2012-04-06T17:58:31.187 に答える