Подсчет элементов в определенном измерении многомерного массива (C #) - PullRequest
3 голосов
/ 13 мая 2011

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

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

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

Ответы [ 2 ]

8 голосов
/ 13 мая 2011

Звучит так, будто вам не нужен прямоугольный массив , как у вас сейчас, но вместо этого массив массивов , например

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

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

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

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

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

3 голосов
/ 13 мая 2011
var dim1 = answersArray.GetLength(0); // 50
var dim2 = answersArray.GetLength(1); // 10
...