Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизДинамический массив Найти похожие ветки
← →
Neket (2006-10-04 12:49) [0]Подскажите как создать и работать (Добавлять, изменять, удалять) динамический массив Записей? Т.е.
Создается запись с именем ZAPIS с полями:
Pole1;
Pole2;
Pole3;
И в процессе работы программы необходимо добавлять в массив новые данные.
← →
Palladin © (2006-10-04 12:51) [1]используй TList, он все сделает за тебя
← →
Neket (2006-10-04 12:55) [2]Т.е. Програмно можно описать примерно так:
type
Zapis = packed record
pole1: string;
pole1:string;
pole1:string;
end;
var
Mass:Array of Zapis;
Если я буду работать именно таким образом то будет ли это работать нормально если Да то как именно с этим можно работать, или есть другой способ то какой и подскажите на примерер пожалуйста.
Заранее благодарен.
← →
SergP. (2006-10-04 13:20) [3]> [2] Neket (04.10.06 12:55)
> Т.е. Програмно можно описать примерно так:
>
> type
>
> Zapis = packed record
> pole1: string;
> pole1:string;
> pole1:string;
> end;
>
> var
>
> Mass:Array of Zapis;
> Если я буду работать именно таким образом то будет ли это
> работать нормально если Да то как именно с этим можно работать,
> или есть другой способ то какой и подскажите на примерер
> пожалуйста.
> Заранее благодарен.
А почему бы этому не работать? Все зависит от дальнейшей реализации...
Если правильно сделаешь, то все будет работать. Правда для эффективной работы придется учесть много ньюансов.
Хотя можно почитать [1] и придется меньше заморачивать голову всякими мелочами...
← →
han_malign © (2006-10-04 13:20) [4]
> используй TList, он все сделает за тебя
- кроме New и Dispose...
> Mass:Array of Zapis;
> Если я буду работать именно таким образом то будет ли это работать нормально
SetLength(Mass, 17);
for i:= Low(Mass) to High(Mass) do Mass[i].pole1:= "Hello World " + IntToStr(i);
...........
Mass1:= Mass2;//копируется ссылка
Mass1[3]:= "Good-bye World";//Mass[3] - тоже принимает значение "Good-bye World"
...........
Mass2:= Copy(Mass, 2, 3);//копия, Mass2 не зависит от Mass, и наоборот
Mass:= nil;// <==> SetLength(Mass, 0) - явное освобождение памяти
for i:= Low(Mass2) to High(Mass2) do ShowMessage(Mass[i].pole1);
← →
Palladin © (2006-10-04 13:41) [5]
> - кроме New и Dispose...
какой ужас...
← →
han_malign © (2006-10-04 14:41) [6]
> какой ужас...
- в этом конкретном случае, особенно если не нужно вставлять/удалять элементы в произвольных позициях - как раз compiler magic динамического массива все сделает за него, а TList нет...
← →
Palladin © (2006-10-04 15:06) [7]
> как раз compiler magic динамического массива все сделает
> за него
что именно он сделает за него такого чего не сделает TList? сам память выделит и/или освободит под запись и все?
а сколько нужно реализовывать вставку/удаление элемента?
а сколько раз перелопачивать большие куски памяти при этом, в случае большого количества записей?
а при ожидаемом небольшом количестве элементов зачем нужны эти телодвижения?
динамический массив оптимально пригоден лишь при довольно станционарном хранении довольно большого набора данных с наиминимальнейшими телодвижениями по вставке/удалению (во время работы конечно)
← →
zamtmn © (2006-10-04 15:40) [8]с TList получится массив ссылок на Zapis а не массив Zapis
← →
Sapersky (2006-10-04 16:23) [9]а сколько нужно реализовывать вставку/удаление элемента?
а сколько раз перелопачивать большие куски памяти при этом, в случае большого количества записей?
Вообще-то есть по крайней мере одна универсальная (хотя и не идеальная) библиотека:
http://rsdn.ru/article/Delphi/dynarrays.xml
(для D6 и далее).
У меня есть вариант, который работает в D5 и перевыделяет память блоками (не по одному элементу).
Насчёт перелопачивать куски - да, при частой вставке/удалении из середины TList быстрее. Но если не важен порядок элементов, можно вместо сдвига "хвоста" копировать последний элемент на место удаляемого. В этом случае (и при добавлении только в конец) массив быстрее - нет накладных расходов на выделение/освобождение памяти для элементов.
Опять же, ИМХО, большое преимущество массива - элементы видно при отладке, если навести курсор...
← →
MsGuns © (2006-10-04 17:02) [10]>zamtmn © (04.10.06 15:40) [8]
>с TList получится массив ссылок на Zapis а не массив Zapis
с двумя разницами:
1. TList - это не массив
2. Zapis - это не массив
← →
Sapersky (2006-10-04 17:57) [11]1. TList - это не массив
Т.н. линейный список, который суть массив указателей :)
← →
zamtmn © (2006-10-04 19:28) [12]>>с двумя разницами:
>>1. TList - это не массив
TList это массив указателей, в данном случае на Zapis
>>2. Zapis - это не массив
Mass:Array of Zapis - это массив элементов типа Zapis
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.064 c