web-dev-qa-db-ja.com

1つの2D配列を別の2D配列にコピーする

このコードを使用して、1つの2D配列を別の2D配列にコピーしました。

Array.Copy(teamPerformance, 0,tempPerformance,0, teamPerformance.Length);

ただし、tempPerformanceの一部のデータを変更すると、これらの変更はteamPerformanceにも適用されます。
それを制御するにはどうすればよいですか?

17
user2079550

これは正しいです: Array.Copyshallowコピーを実行するため、内部次元内の配列のインスタンスは参照によってコピーされます。次のように、LINQを使用してコピーを作成できます。

var copy2d = orig2d.Select(a => a.ToArray()).ToArray();

これが ideoneのデモ です。

15
dasblinkenlight

Clone()が必要です

double[,] arr = 
{
   {1, 2},
   {3, 4}
};
double[,] copy = arr.Clone() as double[,];
copy[0, 0] = 2;
//it really copies the values, not a shallow copy, 
//after:
//arr[0,0] will be 1
//copy[0,0] will be 2
36
Sergey Kulgan

MS( http://msdn.Microsoft.com/en-us/library/z50k9bft.aspx )によると:

SourceArrayとdestinationArrayがどちらも参照型の配列であるか、どちらもObject型の配列である場合、浅いコピーが実行されます。配列の浅いコピーは、元の配列と同じ要素への参照を含む新しい配列です。要素自体または要素によって参照されるものはコピーされません。対照的に、配列のディープコピーは、要素と、要素によって直接または間接的に参照されるすべてのものをコピーします。

2
Sheng