Подсчет элементов в определенном измерении многомерного массива (C #)

#c# #arrays #count #multidimensional-array

#c# #массивы #подсчет #многомерный массив

Вопрос:

Я использую многомерный массив для отслеживания ответов:

 public string[,] answersArray = new string[50, 10];
  

Первое измерение массива отслеживает вопросы (максимум 50 вопросов), тогда как второе измерение отслеживает ответы на каждый вопрос (максимум 10).
Количество ответов на каждый вопрос является переменным.
После загрузки вопроса я хочу определить количество ответов на этот конкретный вопрос. Затем я могу использовать это количество в цикле for для загрузки и отображения этих ответов.
Есть ли простой способ получить это, или мне придется написать что-то самому?
Я знаю, что мог бы просто объявить другой массив, чтобы отслеживать количество ответов на каждый вопрос, и просто использовать это, чтобы выполнить это, но мне просто интересно, есть ли более простое решение.

Ответ №1:

Похоже, вам нужен не прямоугольный массив, какой у вас есть в настоящее время, а массив массивов, например

 string[][] answers = new string[50][];
  

Затем вы можете заполнить каждый массив массивом нужного размера.

Однако другой альтернативой было бы полностью отказаться от использования массивов — используйте List<T> которые будут расти по мере необходимости. В частности, вы могли бы захотеть иметь a, List<Question> где a Question содержит сам текст вопроса и a List<Answer> (или, возможно, просто a List<string> ) для ответов.

Тот факт, что массивы необходимо предварительно определять по размеру, является одной из причин, по которой их следует считать «несколько вредными».

Если вы действительно хотите придерживаться своего первоначального подхода, то, очевидно, вы знаете, что у вас есть 10 элементов в каждой «строке» массива — вам придется выполнить цикл, чтобы найти первое null значение (если таковое имеется), чтобы указать, сколько ответов фактически было заполнено.

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

1. Оглядываясь назад, можно сказать, что использование списков было бы действительно лучше. Прошло некоторое время с тех пор, как я в последний раз кодировал на C #, и поскольку приложение, которое я пишу, очень маленькое, я начал работать с массивами. Спасибо за понимание, это очень полезно!

Ответ №2:

 var dim1 = answersArray.GetLength(0); // 50
var dim2 = answersArray.GetLength(1); // 10
  

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

1. Я также нашел этот ответ где-то еще, но, как я уже сказал, количество ответов во втором измерении массива является переменным. На вопрос 1 может быть 4 ответа, тогда как на вопрос 2 может быть 6 ответов, а на вопрос 3 может быть 10.

2. Тогда ссылаясь на ответ Джона Скитса 🙂