инициализация многомерных строковых массивов - PullRequest
3 голосов
/ 15 января 2010

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

Спасибо

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

Ответы [ 4 ]

4 голосов
/ 15 января 2010

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

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";

Но, очевидно, внутри вашей петли.

3 голосов
/ 15 января 2010

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

3 голосов
/ 15 января 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!";
0 голосов
/ 26 сентября 2015

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

// 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;
    }
}
...