Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

рекурсивный массив


cyber-pilot ©   (2008-05-13 15:23:00) 

Подскажите, как правильно объявить такую рекурсивную конструкцию:

TRec = record
 pole1: Integer;
 pole2: String;
 List: TRecList;
end;

TRecList := array of TRec;


Leonid Troyanovsky   (2008-05-13 22:10:00) [1]


> sniknik ©   (13.05.08 22:03) [14]

> а так не пойдет?

В любом случае, bad design.

--
Regards, LVT.


sniknik   (2008-05-13 22:08:00) [2]

хм... хотя, уже есть, [5] примерно тоже самое.


sniknik   (2008-05-13 22:03:00) [3]

а так не пойдет?
 TRec = class
   pole1: Integer;
   pole2: String;
   List: array of TRec;
 end;


Сергей М.   (2008-05-13 16:57:00) [4]


> ректально, конечно


Вот именно что ректально)


Palladin   (2008-05-13 16:19:00) [5]

упс... за границы вышел... :)


Palladin   (2008-05-13 16:18:00) [6]

:) ну отчего'ж, получится... ректально, конечно

Type
 PRec=^TRec;
 TRec=Record
  p1,p2:Integer;
  sub:PRec;
 End;

Function RecSubRec(R:PRec;nIndex:Integer):PRec;
Begin
 Inc(R,nIndex);
 Result:=R;
End;

Procedure RecInitList(Var R:TRec;nCount:Integer);
Begin
 GetMem(R.Sub,nCount*SizeOf(TRec));
End;

Procedure RecDoneList(Var R:TRec);
Begin
 FreeMem(R.Sub);
End;

Var
 r:TRec;
Begin
 RecInitList(r,10);
 Try
  RecSubRec(r.sub,10).p1:=10;
 Finally
  RecDoneList(r);
 End;
End;

:) но сам факт!..


Сергей М.   (2008-05-13 16:05:00) [7]


> Palladin ©   (13.05.08 15:55) [9]


Тогда простой индексный доступ (как в случае с дин.массивом) не получится, а автора именно он пАрит, насколько мне подсказывает мой телепатор)


Palladin   (2008-05-13 15:55:00) [8]

опля... так нельзя... так нужно...

PRec=^TRec;
TRec = record
pole1: Integer;
pole2: String;
List: PRec;
end;


Palladin   (2008-05-13 15:54:00) [9]

ну ты мощную конструкцию задвинул... внушаить :)
решается примерна так

TRec = record
pole1: Integer;
pole2: String;
List: ^TRec;
end;


Сергей М.   (2008-05-13 15:54:00) [10]


> До меня дошло, можно сделать так:
>
> TRec = class;
>


Это из той же оперы, что и [6], с теми же вытекающими последствиями


cyber-pilot   (2008-05-13 15:53:00) [11]

До меня дошло, можно сделать так:

TRec = class;

TRecList := array of TRec;

TRec = class
pole1: Integer;
pole2: String;
List: TRecList;
end;


Сергей М.   (2008-05-13 15:53:00) [12]

ПРидется задействовать указательные типы, со всеми вытекающими последствиями:

PRec = ^TRec;
TRecList = array of PRec;

TRec = packed record
pole1: Integer;
pole2: String;
List: TRecList;
end;


cyber-pilot   (2008-05-13 15:44:00) [13]

Я упрощенно записал, то что мне нужно.

Поля записи это условия поиска, и одним из условий хотелось бы сделать такую же структуру. Чтобы можно было уточнить изначальные условия.


Сергей М.   (2008-05-13 15:37:00) [14]


> Palladin ©   (13.05.08 15:33) [2]


Дровами тут изрядно попахивает)


Palladin   (2008-05-13 15:33:00) [15]

интересно, что сия конструкция означает :)


Сергей М.   (2008-05-13 15:27:00) [16]

Ты такой конструкцией хочешь с деревьями работать ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо