2010-11-23 3 views
2

내 Delphi 2007 데이터베이스 응용 프로그램에는 Generations 목록이 있습니다. 각 Generation에는 가격 책정 템플릿 목록이 있으며 각 템플릿은 일련의 값입니다. 이 애플리케이션에서 사용자는 광고 항목을 생성하고 모든 세대의 가격 책정 템플릿을 할당 할 수 있습니다. 새로운 세대는 기존 세대를 복제함으로써 만들어집니다. 따라서 사용자는 첫 번째 세대 만 만들고 복제 한 다음 새로운 세대의 필수 가격 템플릿 값을 변경하면됩니다. 이 세대 (및 가격 책정 템플릿)는 originids.ie로 연결되며, Generation1의 originid는 0이고 generation2는 generation1의 id 등을 가리키는 originid를가집니다. 또한 사용자는 기존의 generations.ie, generation3 원점은 generation1 일 수 있습니다. 이제 사용자는 새로 고침 기능을 원합니다. 사용자가 가격 템플릿을 세대간에 "연결됨"으로 업데이트 할 수 있습니다. 즉, 원의 ID로 접속하고있는 경우 (직접 연결은 아니다), 소스 생성의 원점 ID가 타겟의 ID 나 타겟의 직접적인 아이 또는 타겟의 아이의 아이를 직접 참조하고있는 경우. .기타). 아래 설명을 참조하십시오.내림차순 목록의 하위 목록 검색

이 경우 소스의 대상에 대해 알고리즘/데이터 구조를 검색하는 가장 좋은 방법은 무엇입니까?


프라 딥에게 사전에


GenerationName --id을 여러분 모두 감사합니다 - OriginID

1 세대 - 100-- 0
2 세대 --101 --100 (1에서 복제 됨
세대 3 - 102 - 100 (복제 된 1에서)
세대 4 - 103 - 102 (3에서 복제 됨)
세대 5 - 104 - (2에서 복제)

여기에서 사용자는 1 세대에서 3 세대 (세대 1 → 세대 3 →) 또는 세대 4 (세대 1 → 세대 3 → 세대 4) 또는 세대 5 ((세대 1 → 세대 3) 세대 2 → 세대 5). 그러나 3 세대에서 5 세대 사이에는 링크가 없으므로 허용되지 않습니다.

답변

0

세대를 다른 세대로 업그레이드 할 수 있는지 확인하려면 비슷한 기능을 사용하십시오. 여기 gen은 세대를로드하고 Id로 조회 할 수있는 구조입니다.

function canUpgrade(fromId, toId: integer) : boolean; 
var 
    id : integer; 
begin 
    Result := false; 
    id := toId; 
    while id<>0 do 
    begin 
    if gen[id].originId=fromId then 
    begin 
     Result := true; 
     Break; 
    end 
    else 
    begin 
     id := gen[id].originId; 
    end; 
    end; 
end; 
1

내 생각에 tree data structure을 사용하면 이러한 종류의 문제를 해결하는 가장 좋은 방법입니다.

Delphi IDE를 사용하면이 목적으로 TTreeView 구성 요소를 사용할 수 있습니다.

TTreeView 구성 요소를 사용하여 트리 구조에 데이터를 넣습니다. TTreeView 관련 자습서는 Click here입니다.

TTreeView에서 검색하려면 this link을 거쳐야합니다.