2012-06-28 3 views
2

В обработке (язык на основе Java) Я могу это сделать;Копирование подраздела многомерного массива

int [][] a = new int[3][2]; 
for (int i = 0; i < 3; i++) 
{ 
    a[i][0] = i; 
    a[i][1] = i+3; 
} 
int [] b = a[2]; 

b - одномерный массив со значениями 2 и 5. Он принимает массив в строке 2 массива a.

синтаксис MATLAB будет

b = a(3,:); 

Есть ли эквивалент C#? Кажется, я ничего не могу найти, но кажется довольно полезной и очевидной особенностью.

Благодаря

ответ

3

C# имеет multidimensional arrays, но также имеет массивы массивов (также называемые jagged arrays). Вторая форма, что вы после:

// This is a jagged array. It has 3 rows, each of which is an int[] in its own right. 
// Each row can also have a different number of elements from all the others, so if 
// a[i][N] is valid for some i and N, a[x][N] is not necessarily valid for other x != i 
var a = new int[3][]; 

// To populate the array you need to explicitly create an instance for each sub-array 
for (int i = 0; i < 3; i++) 
{ 
     a[i] = new[] { i, i + 3 }; 
} 

// And now this is possible: 
var b = a[2]; 

Если у вас есть многомерный массив под рукой, вам нужно будет сделать копирование вручную.

+0

Ах, я вижу, где я пошел неправильно. Когда я начинаю с зацикленного массива, я задал оба размера в массиве jagged, что вызвало ошибку компилятора. Я привык к тому, что могу указать оба. Благодарю. – blooop

1

C# различает зубчатыми массивов ([][]) и многомерных массивов ([,]):

Jagged Массивы:

Это должно быть возможным; каждый элемент массива представляет собой только массив.

Многомерные массивы:

Здесь вам придется сделать копирование себя, поэлементно.

1

В дополнение к другим ответам: если вы действительно хотите получить копию, то есть вы не хотите b[0] = 42; изменить a[2][0];, то сделать это:

int [] b = (int[])a[2].Clone(); 
Смежные вопросы