Как мне создать прямоугольный массив массивов c#

#c#

#c#

Вопрос:

Я хочу создать 2D-массив (по сути, сетку) таким образом, чтобы каждый элемент представлял собой целочисленный массив длиной 2 (каждый элемент представляет собой 2D-вектор).

Я интуитивно думал, что это сработает, но я получаю invalid rank specifier :

 int[][,] rarr = new int[2][100, 100];
  

Ответ №1:

Код, который вы ищете, это:

 int[][,] rarr = new int[2][,];
rarr[0] = new int[100, 100];
rarr[1] = new int[100, 100];
  

Или, в более общем плане, это:

 int[][,] rarr = new int[2][,];

for (int i = 0; i < 2; i  )
    rarr[i] = new int[100, 100];
  

Ваш код пытается выделить 3 разных массива в одной строке кода, чего вы не можете сделать. Это похоже на то, что вы пытаетесь сделать то же самое, что и этот недопустимый фрагмент кода:

 List<Dictionary<string, string>> x = new List<new Dictionary<string, string>()>();
  

Судя по вашему описанию, вы действительно этого хотите:

 int[,][] rarr = new int[100,100][];

for (int i = 0; i < 100; i  )
    for (int j = 0; j < 100; j  )
        rarr[i, j] = new int[2];
  

Комментарии:

1. Да, мне нужно ваше окончательное решение, поскольку оно создает 100*100 массив, где i*j это массив int длиной 2. Нет ли способа сделать это во время объявления и инициализации?

2. @HarryStuart — Нет, если бы они были, я бы включил это в свой ответ. Вы понимаете, почему не может быть способа сделать это?

3. Не совсем, я ранее создал словарь словарей, и я думал, что смогу создать многомерный массив массивов также во время инициализации.

4. @HarryStuart — Вы не можете создать словарь словарей и инициализировать внутренние словари одновременно. То же самое относится и к массивам.

5. Хммм, мой код словаря таков: static Dictionary<string, Dictionary<string, JArray>> uploadDictionary = new Dictionary<string, Dictionary<string, JArray>>(); . Вы правы. Я инициализирую словарь словарей, а не инициализирую словари внутри словаря. Почему C # запрещает это?