Динамический массив в C#
От: pnb  
Дата: 18.02.05 14:07
Оценка:
Подскадите код как создать в C# динамический массив и изменить его размер.
Re: Динамический массив в C#
От: wraithik Россия  
Дата: 18.02.05 14:08
Оценка:
Здравствуйте, pnb, Вы писали:

pnb>Подскадите код как создать в C# динамический массив и изменить его размер.


Класс ArrayList тебе поможет
Re[2]: Динамический массив в C#
От: Аноним  
Дата: 18.02.05 16:30
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Здравствуйте, pnb, Вы писали:


pnb>>Подскадите код как создать в C# динамический массив и изменить его размер.


W>Класс ArrayList тебе поможет


Не всегда.. мне вот не помог. В функции, которая должна собирать и возвращать типизированный массив, пришлось писать ресайз массива руками. Шаблонов-то нет в 1.1 ...



<my_type>[] my_array = null, temp = null, new_array = null;

for(int i = 0; i < source.count; i++)
{
  if(source[i] != null)
  {
    if(my_array == null)
    {
      my_array = ((<some_type>)source[i].GetData();
    }
    else
    {
      temp = my_array;
      new_array = ((<some_type>)source[i].GetData();
      my_array = new <my_type>[temp.Length + new_array.Length];
      temp.CopyTo(my_array, 0);
      new_array.CopyTo(my_array, temp.Length);
    }
  }
}


примерно так. поскольку проект строго на фреймворке 1.1, буду писать типизированные аррайлисты для value-типов, более одного раза используемых в массивах... поскольку массивы ни каким образом не приводятся к дургим типам, кроме прямого копирования... строка вида

my_string_array = (string[])my_object_array;

компилится, но всегда при исполнении генерирует ошибку.
Re[3]: Динамический массив в C#
От: valmond Россия http://blogs.technet.com/valmond/
Дата: 18.02.05 16:53
Оценка:
Можно посмотреть как ArrayList сделан.
Если я не ошибаюсь, то там внутренний массив при необходимости всегда увеличивается в два раза.
И держится индекс последнего элемента.
Это дает плюс если происходит множественное "поштучное" добавление элементов.
Заметки — SharePoint & InfoPath
http://blogs.technet.com/valmond/
RE: Динамический массив в C#
От: Аноним  
Дата: 20.02.05 14:08
Оценка:
Подскадите код как создать в C# динамический массив и изменить его размер.
ArrayList ar_list=new ArrayList();
sozdaetsya динамический массив размер 16 esli xo4esh ymen4shit razmer do nastoyashego delaesh ar_list.TrimToSize()



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Динамический массив в C#
От: Аноним  
Дата: 20.02.05 14:42
Оценка:
> Подскадите код как создать в C# динамический массив и изменить его размер.

1) Если требуется самый быстрый способ, то так:

// создаем массив необходимого типа
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;
}

2) Если максимальная эффективность не требуется, то можно просто использовать ArrayList.

// создаем ArrayList емкостью — 10 элементов
ArrayList arr = new ArrayList(10);
...
// увеличиваем емкость на 22 элемента
arr.Capacity += 22;

--

Надо помнить, что при сохранении/извлечении int и других ValueType в ArrayList происходит boxing/unboxing

Если в ArrayList надо хранить только строки, то рекомендуется использовать StringCollection.

--

Изменение размеров массива обсуждалось вот здесь: http://www.gotdotnet.ru/Forums/CommonForum/122741.aspx


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
RE: Динамический массив в C#
От: Аноним  
Дата: 20.02.05 19:32
Оценка:
Перед использованием объекта класса ArrayList, его нужно создать:
ArrayList myArrayList = new ArrayList();

Для добавления элементов в объект ArrayList используется метод Add(). В следующем примере в объект myArrayList добавляются четыре строки:

myArrayList.Add("Это");
myArrayList.Add("проверка");
myArrayList.Add("динамического");
myArrayList.Add("массива");

Свойство Count можно использовать в условии цикла типа for для доступа к элементам динамического массива. Например, в следующем цикле используется свойство Count объекта myArrayList, и выводятся значения элементов, которые хранятся в массиве myArrayList:

for (int counter=0; counter<myArrayList.Count; counter++)
{
Console.WriteLine(myArrayList[counter]);
}





данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
RE: Динамический массив в C#
От: Аноним  
Дата: 20.02.05 22:05
Оценка:
> myArrayList.Add("Это");
myArrayList.Add("проверка");
myArrayList.Add("динамического");
myArrayList.Add("массива");

Для хранения строк рекомендуется использовать StringCollection. см. http://msdn.microsoft.com/library/en-us/dnpag/html/scalenetchapt05.asp?frame=true


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Динамический массив в C#
От: FatZorro  
Дата: 21.02.05 10:04
Оценка: +1
Здравствуйте, Аноним, Вы писали:

Можно унаcледоваться от CollectionBase и сделать типизированную коллекцию
В MSDN есть пример ...
Re: Динамический массив в C#
От: Lloyd Россия  
Дата: 21.02.05 10:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>// создаем массив необходимого типа

А>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
Оценка:
Все хорошо, только это не изменение размера массива, а создание массива большего размера и присваивание ссылки на него ссылке на старый массив. А это как говорится, "две большие разницы".

А разве можно иначе изменить размер массива?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Динамический массив в C#
От: Lloyd Россия  
Дата: 21.02.05 11:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А разве можно иначе изменить размер массива?


Некорректно сформулирован вопрос. Его (размер) вообще нельзя изменять.
Re[2]: Динамический массив в C#
От: Аноним  
Дата: 21.02.05 11:53
Оценка:
Некорректно сформулирован вопрос. Его (размер) вообще нельзя изменять.

Тогда, может, надо было ответить автору вопроса, что "динамических массивов не бывает"?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Динамический массив в C#
От: Lloyd Россия  
Дата: 21.02.05 13:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Некорректно сформулирован вопрос. Его (размер) вообще нельзя изменять.


А>Тогда, может, надо было ответить автору вопроса, что "динамических массивов не бывает"?


Нет, в котексте заданного автором вопроса этот ответ не был бы безусловно верным, т.к. можно было предположить, что под словом массив автор понимае массив как структуру данных. В этом случае в качестве динамического массива вполне м. использовать ArrayList.

Но в контексте же твоего ответа ясно что ты трактуешь понятие массива как массив .Net, а массив в таком понимании динамическим не бывает.
Re[3]: Динамический массив в C#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.02.05 14:14
Оценка:
Здравствуйте, Corwin_XX, Вы писали:


C_X>Тогда, может, надо было ответить автору вопроса, что "динамических массивов не бывает"?


Смотря, что понимать под динамическим массивов
http://gzip.rsdn.ru/Forum/Message.aspx?mid=450320&amp;only=1
Автор: Serginio1
Дата: 20.11.03
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re[4]: Динамический массив в C#
От: Mika Soukhov Stock#
Дата: 21.02.05 14:25
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Corwin_XX, Вы писали:



C_X>>Тогда, может, надо было ответить автору вопроса, что "динамических массивов не бывает"?


S>Смотря, что понимать под динамическим массивов

S> http://gzip.rsdn.ru/Forum/Message.aspx?mid=450320&amp;only=1
Автор: Serginio1
Дата: 20.11.03


Эх, сколько вариантов решений. Осталось за малом — узнать, что конкретно вопрошал автор.
Re[5]: Динамический массив в C#
От: pnb  
Дата: 21.02.05 14:40
Оценка: :)
Здравствуйте, Mika Soukhov, Вы писали:

MS>Эх, сколько вариантов решений. Осталось за малом — узнать, что конкретно вопрошал автор.


Если честно, то я перевожу классы из VCL на C#. В Delphi я использовал динамические массивы: SetLength и т.п. и не парился. Здесь же у меня уже голова болит от вариантов что тут понаписали.
Re[6]: Динамический массив в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.02.05 14:59
Оценка: +1
Здравствуйте, pnb, Вы писали:

pnb>Если честно, то я перевожу классы из VCL на C#. В Delphi я использовал динамические массивы: SetLength и т.п. и не парился. Здесь же у меня уже голова болит от вариантов что тут понаписали.


Используй ArrayList и не мучайся. Все остальное видимо тебе использовать пока рано.
... << RSDN@Home 1.1.4 beta 4 rev. 337>>
AVK Blog
Re[5]: Динамический массив в C#
От: Аноним  
Дата: 21.02.05 15:01
Оценка:
SetLength в Delphi внутри создавал новый массив и копировал туда старый!
Примерно так же будет, если использовать Array.Copy.
ArrayList же более родственный для делфового TList.

Все должно быть просто, очень просто, настолько просто — насколько это возможно!
Оренбургское сообщество .NET разработчиков
Глупый пингвин робко прячет тело жирное в утесах.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Динамический массив в C#
От: Аноним  
Дата: 21.02.05 15:08
Оценка:
Но в контексте же твоего ответа ясно что ты трактуешь понятие массива как массив .Net,
Я трактую понятие "массив" как некую структуру данных. Про класс .NET я так и пишу Array (см., например, http://www.gotdotnet.ru/Forums/DataWorks/122825.aspx).

А то, что в этом коде
            int[] tmp = new int[arr.Length + delta];
            Array.Copy(arr, 0, tmp, 0, arr.Length);

создаётся новый объект, видно невооружённым взглядом.


Мой вопрос (более полно) звучал так:
А разве можно иначе изменить размер массива? (кроме как создать новый, большего размера и скопировать туда исходный массив).

Я не стал писать то, что было в скобках, так как код был уже приведён, и, как мне казалось, всем и так понятно, о чём идёт речь.





данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.