Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.06;
Скачать: CL | DM;

Вниз

Для волков делфи   Найти похожие ветки 

 
SergeyDon   (2002-05-23 15:21) [0]

На сколько себя оправдывает описание таким образом:

type TShetchik = record
ID:cardinal;
Sh_Name:string;
Sh_Number:cardinal;
end;
type TShema = record
ID:cardinal;
Name:string;
Shetchik: array of TShetchik;
end;
PShema = ^TShema;
...

var
MyList:TList;
Shema:PShema;

...
MyList:= TList.Create;
New(Shema);
Shema^.ID:=$00001;
Shema^.Name:="test";
SetLength(Shema^.Shetchik,3);
Shema^.Shetchik[0].ID:=$0001;
Shema^.Shetchik[0].Sh_Name:="sh1";
Shema^.Shetchik[0].Sh_Number:=$1010;
Shema^.Shetchik[1].ID:=$0002;
Shema^.Shetchik[1].Sh_Name:="sh2";
Shema^.Shetchik[1].Sh_Number:=$2010;
Shema^.Shetchik[2].ID:=$0003;
Shema^.Shetchik[2].Sh_Name:="sh3";
Shema^.Shetchik[2].Sh_Number:=$2030;
MyList.Add(Shema);
New(Shema);
Shema^.ID:=$00002;
Shema^.Name:="test2";
SetLength(Shema^.Shetchik,4);
Shema^.Shetchik[0].ID:=$0002;
Shema^.Shetchik[0].Sh_Name:="sh1";
Shema^.Shetchik[0].Sh_Number:=$0010;
Shema^.Shetchik[1].ID:=$0002;
Shema^.Shetchik[1].Sh_Name:="sh2";
Shema^.Shetchik[1].Sh_Number:=$0110;
Shema^.Shetchik[2].ID:=$0003;
Shema^.Shetchik[2].Sh_Name:="sh3";
Shema^.Shetchik[2].Sh_Number:=$0030;
Shema^.Shetchik[3].ID:=$0004;
Shema^.Shetchik[3].Sh_Name:="sh4";
Shema^.Shetchik[3].Sh_Number:=$1130;
MyList.Add(Shema);


 
Alx2 ©   (2002-05-23 15:31) [1]

А каковы цели? Скорость доступа, простота работы, компактность, наглядность, простота хранения? (Только не говорите, что нужно все сразу 8-)


 
SergeyDon   (2002-05-23 16:03) [2]

простота работы и наглядность наверное больше сюда подходит.

А если честно так еще никогда неделал вот решил попробовать.
Интересно как делфи с динамически выделяемой паматью будет работать тут интересует пару вопросов:
1. когда делаю New(Shema) еще неизвестно сколько там будет
SetLength(Shema^.Shetchik, ? ) размер массива задаётся позже.?
2. отдельные элименты Shema будут то удалятся то вставлятся динамически как при том расход памяти (общий объём) ведь ощишенные куски могут занимать мало места для другой информации и наверное будут неиспользованными до выгрузки всей программы? а если таких кусков будет 1000.


 
Alx2 ©   (2002-05-23 16:37) [3]

>простота работы и наглядность наверное больше сюда подходит.
Я бы тогда делал на базе классов. Например, так:
type TShema = class
ID:cardinal;
Shetchik: array of TShetchik;
constructor Create(<твои параметры, которые собрался хранить>);
destructor Destroy; // В нем хороним Shetchik, например.
end;

А для хранения использовать TStringList.
Var StrLst : TStringList;
begin
StrLst := TStringList.Create;
StrLst.AddObject("test1",TShema.Create(<параметры1>));
StrLst.AddObject("test2",TShema.Create(<параметры2>));
StrLst.AddObject("test3",TShema.Create(<параметры3>));
А потом пользоваться методами TStringList - сортировка по Name, уничтожение/добавление etc. А про дыры, которые якобы останутся, можно первое время забыть.

>1. когда делаю New(Shema) еще неизвестно сколько там будет
>SetLength(Shema^.Shetchik, ? ) размер массива задаётся позже.?
Да. После того, как создан Shema


 
MBo ©   (2002-05-23 16:46) [4]

да и вместо Array of TShetchik может, лучше список использовать -мне кажется, они не требуют такой аккуратности, как динамические массивы


 
SergeyDon   (2002-05-23 17:21) [5]

re Alx2
при использовании классов в Create я так понял будет создаваться массив Shetchik: array of TShetchik который в destructor Destroy уничтожается.
А где уничтожать
ID:cardinal; {от TShema}
Name:string; {от TShema}
или это все там-же?


 
Alx2 ©   (2002-05-24 07:27) [6]

>А где уничтожать
> ID:cardinal; {от TShema}
> Name:string; {от TShema}

Их уничтожать не надо.



Страницы: 1 вся ветка

Текущий архив: 2002.06.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-18041
Kordel
2002-05-23 22:42
2002.06.06
Каждая буква одинаковой ширины. Как это сделать?


3-17795
mad0max
2002-05-14 04:49
2002.06.06
Delphi 5.0 InterBase 6.0


7-18173
Brand
2002-03-10 00:46
2002.06.06
Завершение Windows


1-18009
Фантом
2002-05-24 13:06
2002.06.06
Запуск чужой программы в своем окне


1-17982
Илья______
2002-05-23 21:14
2002.06.06
Чем отличается CompareStr от простого сравнения?