инициализация многомерных строковых массивов

Застрял здесь, пытаясь инициализировать массив (С#) с помощью цикла. В зависимости от этого количество рядов будет меняться. Мне нужно вернуть два значения, которые я вычисляю ранее в программе startweek и endweek. Много примеров по созданию массивов int с использованием циклов, но я ничего не могу найти о динамических строках и многомерных массивах.

Спасибо

как установить значения для col1 в строке [,] arrayWeeks = new string[numWeeks, col1]; Это яснее?


person Brick    schedule 15.01.2010    source источник
comment
В чем именно заключается ваш вопрос?   -  person Eric Mickelsen    schedule 15.01.2010


Ответы (4)


(Спасибо за пояснение.) Вы можете сделать многомерный инициализатор следующим образом:

string[,] arrayWeeks = new string[,] { { "1", "2" }, { "3", "4" }, { "5", "6" }, { "7", "8" } };

Или, если ваш массив зубчатый:

string[][] arrayWeeks = new string[][] 
{
    new string[] {"1","2","3"},
    new string[] {"4","5"},
    new string[] {"6","7"},
    new string[] {"8"}
};

Если вы в петле, я предполагаю, что вы хотите неровный. И вместо инициализации со значениями вы можете вызвать arrayWeeks[x] = new string[y];, где x — это строка, которую вы добавляете, а y — количество элементов в этой строке. Затем вы можете установить каждое значение: arrayWeeks[x][i] = ..., где вы устанавливаете i-й элемент в строке. Ваше первоначальное объявление массива будет string[][] arrayWeeks = new string[numRows][];

Итак, подводя итог, вы, вероятно, хотите что-то вроде этого:

    int numRows = 2;
    string[][] arrayWeeks = new string[numRows][];
    arrayWeeks[0] = new string[2];
    arrayWeeks[0][0] = "hi";
    arrayWeeks[0][1] = "bye";
    arrayWeeks[1] = new string[1];
    arrayWeeks[1][0] = "aloha";

Но, очевидно, внутри вашего цикла.

person Eric Mickelsen    schedule 15.01.2010

В C# есть два типа того, что вы могли бы назвать «многомерными» массивами. Существуют подлинные многомерные массивы:

string[,] array = new string[4, 4];
array[0, 0] = "Hello, world!";
// etc.

Существуют также зубчатые массивы. Зубчатый массив массив, элементы которого также являются массивами. «Строки» в зубчатом массиве могут быть разной длины. Важное замечание о зубчатых массивах заключается в том, что вы должны вручную инициализировать «строки»:

string[][] array = new string[4][];
for(int i = 0; i < 4; i++) {
    array[i] = new string[4];
}
array[0][0] = "Hello, world!";
person jason    schedule 15.01.2010

Если количество строк меняется в зависимости от какого-либо фактора (не фиксированного), лучше использовать контейнер, например список (см. список в MSDN). Вы можете вложить список в список, чтобы создать многомерный список.

person Extrakun    schedule 15.01.2010

Поздно к разговору, но вот пример зубчатого массива, когда вы динамически устанавливаете размер и данные:

// rowCount from runtime data
stringArray = new string[rowCount][];

for (int index = 0; index < rowCount; index++)
{
    // columnCount from runtime data
    stringArray[index] = new string[columnCount];

    for (int index2 = 0; index2 < columnCount; index2++)
    {
        // value from runtime data
        stringArray[index][index2] = value;
    }
}
person Jahmic    schedule 26.09.2015