Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1157830629
AlexeyT
2006-09-09 23:37
2006.10.22
Перетаскивание мышью ScrollBox a


8-1143042841
Sco
2006-03-22 18:54
2006.10.22
Отразить обьект


2-1159359502
Rustam
2006-09-27 16:18
2006.10.22
Индекс


15-1159431050
euru
2006-09-28 12:10
2006.10.22
Веб-дизайн


15-1159620235
Сатир
2006-09-30 16:43
2006.10.22
Пересылка сообщения на мобильник посредством Bluetooth





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский