2012-04-06 4 views
0

Позволяет сказать, у меня есть 2D массив словарей: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; 

Но до сих пор, когда я изменить первый, она автоматически изменяет второй.
Я действительно не знаю, как это сделать.

+0

Один меняется, и так далее, так что вы говорите, что хотите получить глубокую копию вместо этого? – payo

+0

@payo - Да, точно. –

+0

Array - ссылочный тип; «mat» - это просто ссылка на экземпляр, а «matNew = mat» копирует ссылку, а не фактический массив. Вы пытаетесь создать копию массива или копию массива И все словари в нем? –

ответ

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).

Смежные вопросы