как вставить новый массив в мой зубчатый массив

привет, я буду очень признателен за любую помощь.

хорошо, давайте посмотрим, сначала я объявлю зубчатый массив, подобный этому, и следующий код

int n=1, m=3,p=0;

int[][] jag_array =new[n];

теперь мой зубчатый массив будет иметь 1 массив внутри, затем вам нужно заполнить массив следующим образом:

car=2;
do
     {
     jag_array[p]= new double[car];
     for (int t = 0; t < carac; t++)
          {
           jag_array[p][t] = variableX;
          }
     p=p+1
     }
 while(p==0)

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

jag_array[0][0]=4
jag_array[0][1]=2

теперь мой вопрос, как я могу вставить новый массив без потери моих предыдущих данных, если я объявлю

jag_array[p+1]= new double[car];

я потеряю данные из предыдущего, я хотел бы выглядеть примерно так:

jag_array[0][0]=4
jag_array[0][1]=2
jag_array[1][0]=5
jag_array[1][1]=6

причина, по которой я не объявлял с начала 2 массива, заключается в том, что я не знаю, сколько я собираюсь использовать, это может быть всего 1 или 20, и каждый раз, когда мне приходится создавать новый массив без потери предыдущих данных, которые уже были наполняй, спасибо всем за внимание,


person JUAN    schedule 01.08.2012    source источник
comment
По какой причине вы не можете использовать List<int[]>?   -  person recursive    schedule 02.08.2012
comment
@recursive list не будет работать для целей моей программы по этой причине   -  person JUAN    schedule 02.08.2012


Ответы (1)


Размер массива после его создания по определению неизменен. Если вам нужно переменное количество элементов, используйте List<T> - в своем случае, вероятно, List<int[]>.

Единственным альтернативным решением было бы создать новый массив с новым размером (и присвоить его вашей переменной jag_array) и скопировать все предыдущие элементы из вашего старого массива в новый массив. Это излишне сложный код, когда вы можете просто использовать List<T>, но если вы не можете использовать List<T> по какой-либо причине, вот пример:

// increase the length of jag_array by one
var old_jag_array = jag_array; // store a reference to the smaller array
jag_array = new int[old_jag_array.Length + 1][]; // create the new, larger array
for (int i = 0; i < old_jag_array.Length; i++) {
    jag_array[i] = old_jag_array[i]; // copy the existing elements into the new array
}
jag_array[jag_array.Length - 1] = ... // insert new value here
person O. R. Mapper    schedule 01.08.2012
comment
@Daniel: Что ты имеешь в виду? В C# массивы являются ссылочным типом, поэтому массив массивов уже является, так сказать, массивом указателей на массивы. - person O. R. Mapper; 02.08.2012
comment
Да, я сначала подумал, что это вопрос С++. Не то чтобы я действительно рекомендовал это и в С++. - person Daniel; 02.08.2012
comment
Но правда ли это? Является ли int[][] массивом массивов в С#, а не двумерным массивом? Это разные вещи с очень разными свойствами. - person Daniel; 02.08.2012
comment
@Daniel: Да, это правда. В C# двумерный массив будет записан как int[,], а int[][] — это массив массивов. - person O. R. Mapper; 02.08.2012
comment
@O.R.Mapper для части моего списка программ выходит за рамки уравнения: я сначала использую int [,], как бы я ни доходил до сложности, поэтому мне нужно перейти на jagedarray, ваш ответ хорош, но не то, что я ищу - person JUAN; 02.08.2012
comment
@JUAN: Из того, что вы сказали нам до сих пор, не становится очевидным, почему List<T> не должно работать, поэтому, очевидно, недостаточно информации, чтобы сказать, что вы ищете. Пожалуйста, расширьте свой вопрос, чтобы сделать это более ясным :-) - person O. R. Mapper; 02.08.2012
comment
сначала позвольте мне увидеть, что этот пример - это простой способ объяснить мою проблему. 2.- Список не является частью моего решения, возможно, их проще использовать, но моя программа не предполагает их использования. одно из ограничений для проекта i я работаю, я не могу вдаваться в подробности, почему я могу только сказать, что этот список отсутствует :( - person JUAN; 02.08.2012
comment
@JUAN: Хорошо, если предположить, что List<T> по какой-то причине исключено, я добавил пример кода, который показывает, как добавить элемент в массив. Я написал это в кавычках, потому что, конечно, вы ничего не добавляете к существующему экземпляру массива, вы просто заменяете весь экземпляр массива новым, большим. Поэтому вы должны убедиться, что вы не сохраняете никаких других ссылок на старый массив, но всегда используете переменную jag_array для доступа к текущему массиву. (Это более или менее то, что List<T> делает внутри, кстати.) - person O. R. Mapper; 02.08.2012