Здравствуйте, pnb, Вы писали:
pnb>Подскадите код как создать в C# динамический массив и изменить его размер.
Класс ArrayList тебе поможет
Re[2]: Динамический массив в C#
От:
Аноним
Дата:
18.02.05 16:30
Оценка:
Здравствуйте, wraithik, Вы писали:
W>Здравствуйте, pnb, Вы писали:
pnb>>Подскадите код как создать в C# динамический массив и изменить его размер.
W>Класс ArrayList тебе поможет
Не всегда.. мне вот не помог. В функции, которая должна собирать и возвращать типизированный массив, пришлось писать ресайз массива руками. Шаблонов-то нет в 1.1 ...
примерно так. поскольку проект строго на фреймворке 1.1, буду писать типизированные аррайлисты для value-типов, более одного раза используемых в массивах... поскольку массивы ни каким образом не приводятся к дургим типам, кроме прямого копирования... строка вида
my_string_array = (string[])my_object_array;
компилится, но всегда при исполнении генерирует ошибку.
Можно посмотреть как ArrayList сделан.
Если я не ошибаюсь, то там внутренний массив при необходимости всегда увеличивается в два раза.
И держится индекс последнего элемента.
Это дает плюс если происходит множественное "поштучное" добавление элементов.
Подскадите код как создать в C# динамический массив и изменить его размер.
ArrayList ar_list=new ArrayList();
sozdaetsya динамический массив размер 16 esli xo4esh ymen4shit razmer do nastoyashego delaesh ar_list.TrimToSize()
Свойство Count можно использовать в условии цикла типа for для доступа к элементам динамического массива. Например, в следующем цикле используется свойство Count объекта myArrayList, и выводятся значения элементов, которые хранятся в массиве myArrayList:
for (int counter=0; counter<myArrayList.Count; counter++)
{
Console.WriteLine(myArrayList[counter]);
}
Здравствуйте, Аноним, Вы писали:
А>// создаем массив необходимого типа А>int[] arr = new int[10]; А>... А>// увеличиваем массив на 22 элемента А>IncreaseLength(ref arr, 22);
А>public static void IncreaseLength(ref int[] arr, int delta) А>{ А> int[] tmp = new int[arr.Length + delta]; А> Array.Copy(arr, 0, tmp, 0, arr.Length); А> arr = tmp; А>}
Все хорошо, только это не изменение размера массива, а создание массива большего размера и присваивание ссылки на него ссылке на старый массив. А это как говорится, "две большие разницы".
Re: Динамический массив в C#
От:
Аноним
Дата:
21.02.05 11:28
Оценка:
Все хорошо, только это не изменение размера массива, а создание массива большего размера и присваивание ссылки на него ссылке на старый массив. А это как говорится, "две большие разницы".
Здравствуйте, Аноним, Вы писали:
А>Некорректно сформулирован вопрос. Его (размер) вообще нельзя изменять.
А>Тогда, может, надо было ответить автору вопроса, что "динамических массивов не бывает"?
Нет, в котексте заданного автором вопроса этот ответ не был бы безусловно верным, т.к. можно было предположить, что под словом массив автор понимае массив как структуру данных. В этом случае в качестве динамического массива вполне м. использовать ArrayList.
Но в контексте же твоего ответа ясно что ты трактуешь понятие массива как массив .Net, а массив в таком понимании динамическим не бывает.
Здравствуйте, Mika Soukhov, Вы писали:
MS>Эх, сколько вариантов решений. Осталось за малом — узнать, что конкретно вопрошал автор.
Если честно, то я перевожу классы из VCL на C#. В Delphi я использовал динамические массивы: SetLength и т.п. и не парился. Здесь же у меня уже голова болит от вариантов что тут понаписали.
Здравствуйте, pnb, Вы писали:
pnb>Если честно, то я перевожу классы из VCL на C#. В Delphi я использовал динамические массивы: SetLength и т.п. и не парился. Здесь же у меня уже голова болит от вариантов что тут понаписали.
Используй ArrayList и не мучайся. Все остальное видимо тебе использовать пока рано.
SetLength в Delphi внутри создавал новый массив и копировал туда старый!
Примерно так же будет, если использовать Array.Copy.
ArrayList же более родственный для делфового TList.
Все должно быть просто, очень просто, настолько просто — насколько это возможно! Оренбургское сообщество .NET разработчиков
Глупый пингвин робко прячет тело жирное в утесах.
Но в контексте же твоего ответа ясно что ты трактуешь понятие массива как массив .Net,
Я трактую понятие "массив" как некую структуру данных. Про класс .NET я так и пишу Array (см., например, http://www.gotdotnet.ru/Forums/DataWorks/122825.aspx).
создаётся новый объект, видно невооружённым взглядом.
Мой вопрос (более полно) звучал так:
А разве можно иначе изменить размер массива? (кроме как создать новый, большего размера и скопировать туда исходный массив).
Я не стал писать то, что было в скобках, так как код был уже приведён, и, как мне казалось, всем и так понятно, о чём идёт речь.