Работа с многомерными массивами в C # похожа на Java - PullRequest
1 голос
/ 15 ноября 2011

В Java мы можем сделать это:

bool[][] something = new bool[5][10];

// Then, we can do this, since indexes do not refer to null instances:
something [3][7] = true;

Однако то же самое, похоже, не компилируется в C #. Есть ли эквивалентный способ сделать это в C #?

Ответы [ 3 ]

7 голосов
/ 15 ноября 2011

Синтаксис немного отличается:

bool[,] something = new bool[5,10];
// Then, we can do this, since indexes do not refer to null instances:
something [3,7] = true;

Или, если вы используете C # 3.0+, вы можете немного упростить объявление:

//Doesn't work for fields.
var something = new bool[5,10];

Это многомерный массив,Вы можете обратиться к MSDN для получения дополнительной информации.

3 голосов
/ 15 ноября 2011

Синтаксис в вашем вопросе даст вам неровные массивы в C # (массивы массивов).Они отличаются от многомерных массивов (один массив с элементами, хранящимися непрерывно в памяти, с многомерным индексированием).

Я не проделал большую работу в Java, но небольшое исследование показывает, что многомерный массив Java аналогиченв неровный массив C #, а не в многомерный массив C #.

Чтобы объявить и создать массив массивов, вы должны сделать следующее:

bool[][] something = new bool[5][];

Это создаст массив из пяти элементов, чейэлементы имеют тип bool[].Вам нужно будет создать элементы отдельно (или, возможно, получить ссылки на них из других источников).Пять массивов не обязательно должны иметь одинаковую длину:

for (int i = 0; i < something.Length; i++)
    something[i] = new bool[GetLengthForElement(i)];

Если вы хотите, чтобы все они имели длину 10 элементов, вы, конечно, могли бы сделать это вместо этого:

for (int i = 0; i < something.Length; i++)
    something[i] = new bool[10];
0 голосов
/ 15 ноября 2011

C # s, синтаксис немного отличается.Очень быстрый Google выкинул эту страницу MSDN .

...