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

Вниз

как собрать цепочки?   Найти похожие ветки 

 
картман ©   (2010-11-07 20:32) [0]

Всем привет.

Есть несколько массивов переменной длины(зубчатый двухмерный?), примерно таких записей: id, parent_id

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

есть таблица: id, parent_id, выбираю записи в случайном порядке(нет, но для примера пусть будет так) в несколько наборов данных. Потом нужно найти цепочки по id->parent_id из разных НД, только из одного НД связывать нельзя, а вот по всем остальным пройтись нужно. Чет не никак не получается((


 
картман ©   (2010-11-07 20:33) [1]


> только из одного НД связывать нельзя,

между собой, в смысле


 
Jeer ©   (2010-11-08 10:20) [2]

На клиенте, что-ли ?

Ну так, засоси все наборы в виртуальную таблицу и там разбирайся "деревянными" методами, начиная с самого верхнего parent-a.


 
картман ©   (2010-11-08 12:04) [3]


> разбирайся "деревянными" методами

что это такое?


 
Jeer ©   (2010-11-08 12:25) [4]

Рекурсивный обход ( построение) дерева.
Пример - TTreeView.


 
картман ©   (2010-11-08 12:38) [5]


> Jeer ©   (08.11.10 12:25) [4]

спасибо, гляну.


 
картман ©   (2010-11-13 08:22) [6]


> Jeer ©   (08.11.10 12:25) [4]
>
> Рекурсивный обход ( построение) дерева.

медленно - много данных(


 
Sha ©   (2010-11-13 09:11) [7]

Правильно ли я понял, что родителя элемента a[i,j]
надо искать во всех массивах a[k] таких, что k<>i ?


 
картман ©   (2010-11-13 19:41) [8]


> Sha ©   (13.11.10 09:11) [7]

да. Только родитель и ребенок могут быть в любых массивах.


 
картман ©   (2010-11-13 19:42) [9]


> Только родитель и ребенок могут быть в любых массивах.

ну, в смысле a[i][j] может быть как ребенком, так и родителем.


 
картман ©   (2010-11-13 19:47) [10]

есть возможность определить непрямое родство - без этого совсем уж...


 
Sha ©   (2010-11-13 20:12) [11]

Диапазон значений ID известен?


 
картман ©   (2010-11-13 20:23) [12]


>  Sha ©   (13.11.10 20:12) [11]
>
> Диапазон значений ID известен?

можно сделать


 
Sha ©   (2010-11-13 21:15) [13]

Создаем вспомогательный массив-индекс,
пробегаемся по нему и вытаскиваем цепочки.

procedure TForm1.Button2Click(Sender: TObject);
type
 TIdRec= record
   Id, ParentId: integer;
   end;
 TRefRec= record
   Ref: integer;
   IsLeaf: boolean;
   end;
const
 MaxId  = 10;
 MinId  =  1;
 IsRoot = MinId - 1;
 NotId  = IsRoot - 1;
var
 a: array of array of TIdRec;
 p: array of TRefRec;
 i, j: integer;
 s: string;
begin;
 SetLength(a,2,3);
 with a[0,0] do begin; Id:=1; ParentId:=IsRoot; end;
 with a[0,1] do begin; Id:=4; ParentId:=2; end;
 with a[0,2] do begin; Id:=5; ParentId:=6; end;
 with a[1,0] do begin; Id:=2; ParentId:=1; end;
 with a[1,1] do begin; Id:=3; ParentId:=1; end;
 with a[1,2] do begin; Id:=6; ParentId:=IsRoot; end;

 Setlength(p,MaxId-MinId+1);
 for i:=0 to MaxId-MinId do
 with p[i] do begin;
   Ref:=-2;
   IsLeaf:=true;
   end;

 for i:=0 to Length(a)-1 do
 for j:=0 to Length(a[i])-1 do
 with a[i,j] do
 with p[Id-MinId] do begin;
   Ref:=ParentId-MinId;
   p[Ref].IsLeaf:=false;
   end;

 Memo1.Lines.Clear;
 for i:=0 to MaxId-MinId do
 if p[i].IsLeaf and (p[i].Ref>-2) then begin;
   s:="";
   j:=i;
   repeat;
     s:=s+IntToStr(j+MinId);
     j:=p[j].Ref;
     until j<0;
   Memo1.Lines.Add(s);
   end;

 end;


 
картман ©   (2010-11-13 21:57) [14]


> Sha ©   (13.11.10 21:15) [13]

Как-то не догадался обозначить листы и проверять пути только от них((
Спасибо.



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

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

Наверх




Память: 0.5 MB
Время: 0.008 c
2-1289388923
FedorS
2010-11-10 14:35
2011.01.30
CodeGear 2009 и Rave Reports 7.6.0


15-1287145661
неокубинец
2010-10-15 16:27
2011.01.30
Acer или не Acer?


11-1229310616
L`Autour
2008-12-15 06:10
2011.01.30
Вопрос по перехвату LVN_GETDISPINFOW


11-1228398987
Al Berto
2008-12-04 16:56
2011.01.30
WinCE HTTP protocol using KOL on Lazarus


15-1287127458
Demo
2010-10-15 11:24
2011.01.30
Напомните сайт