Как посчитать до какого значения заполнен массив по каждому из измерений?

Здравствуйте.

Есть некоторый двухмерный массив, к примеру:
string[,] dataArray = new string[10, 10];
И этот массив заполнен некоторыми строковыми значениями, но не полностью, а только до некоторых значений. К примеру по измерению (dimension) - 0 до 4-х, а по измерению (dimension) - 1 до 5-ти.

Как посчитать до какого значения заполнен массив по каждому из измерений?

P.S. Знаком с методом:
.GetUpperBound(0)
.GetUpperBound(1)

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

P.P.S. Запись в массив происходила последовательно и с самого начала массива
  • Вопрос задан
  • 213 просмотров
Решения вопроса 3
@carbon88
.NET developer/ORM developer
Пробежаться по массиву и проверить что там заполнено. Тут есть два варианта, бежать сначала и искать первый незаполненный или бежать с конца и искать первый заполненный. выбирайте стратегию сами.
Тут еще вопрос каким образом идет запись - рандомно, в любую клетку так сказать, или последовательно.
Если рандомно, то скорее всего нужно брать вариант просмотра с конца. Если последовательно, то тут вообще можно без обхода обойтись, запоминая максимальный индекс(ы) по которому(ым) произвелась запись.
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C#
И этот массив заполнен некоторыми строковыми значениями, но не полностью, а только до некоторых значений.

Это предположение неверно. Массив не бывает заполнен частично, до некоторых значений. В массиве всегда есть все значения, просто при создании массива они устанавливаются в дефолтовые.
Вам нужно хранить ваши значения в структуре переменного размера, например в списке (List).
Либо, раз уж у вас значения строкового типа, вы можете воспользоваться тем фактом, что строка - это ссылочный тип, и поэтому может иметь значения null. Вы можете идти по элементам массива до первого встретившегося null и считать его первым "незаполенным" элементом, если это подходит для вашей задачи (правда, тогда это придется делать каждый раз заново).
Ответ написан
Комментировать
@e_danilchenko
А просто пробежаться по измерениям и запоминать индексы не-null елеменнтов?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Madfisht3
for(int i = 0; i < 10; i++)
{
  int counter = 0;
  for(int j = 0; dataArray[i,j] != default(string) && j < 10; j++)
    counter = j;
  Console.WriteLine("{0} length {1}", i, counter);
}

Примерно так.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы