Скопируйте один 2D-массив в другой 2D-массив
Я использовал этот код для копирования одного 2D-массива в другой 2D-массив:
Array.Copy(teamPerformance, 0,tempPerformance,0, teamPerformance.Length);
Однако, когда я изменяю некоторые данные в tempPerformance
, эти изменения также относятся к teamPerformance
.
Что мне делать, чтобы контролировать это?
Ответы
Ответ 1
Это правильно: Array.Copy
выполняет мелкую копию, поэтому экземпляры массивов внутри внутреннего измерения копируются по ссылке. Вы можете использовать LINQ для создания копии, например:
var copy2d = orig2d.Select(a => a.ToArray()).ToArray();
Вот демон на ideone.
Ответ 2
Вам нужен 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
Ответ 3
Согласно MS (http://msdn.microsoft.com/en-us/library/z50k9bft.aspx):
Если sourceArray и destinationArray являются массивами ссылочного типа или являются массивами типа Object, выполняется неглубокая копия. Неглубокая копия массива - это новый массив, содержащий ссылки на те же элементы, что и исходный массив. Сами элементы или что-либо, на которые ссылаются элементы, не копируются. Напротив, глубокая копия массива копирует элементы и все, что прямо или косвенно ссылается на элементы.