Вниз
Скачать: CL | DM;

Поиск в TList   Найти похожие ветки 

← →
Elast   (2004-12-01 17:56) [0]

Есть классы для Item и для хранения Item:
 TMyItem = class                        
   fId   : integer;
   fName : string;
   constructor Create( aId : integer; aName : string);
 end;

 TMyList = class(TList)                  
   private
     fFindProc : TMyFindProc;
     procedure AddItem(Item: TMyItem);
   public
     property FindProc : TMyFindProc read fFindProc write fFindProc;
     constructor Create;
     destructor  Destroy; override;
 end;

Я хочу построить поиск перебором в TMyList по одному из полей TMyItem, например Name.

 TMyFindProc = function (aItem: variant): Pointer;
 BSearch : TMyFindProc;

function BSearch(aItem: variant): Pointer;
var i: Integer;
   P: TMyItem;
begin
 Result := nil;
 with MyList do begin
   for i:=0 to Count-1 do begin
     P := TMyItem(Items[i]);
     If (P.fName = aItem) then begin
       Result := P;
       exit;
     end;
   end;
 end;
end;

TMyItem может наследоваться поэтому поле поиска заранее неизвестно. В BSearch есть ошибки. Возможно ли это сделать. Гда располагать BSearch? Заранее спасибо.


← →
jack128 ©   (2004-12-01 18:26) [1]

TFindedProc = function ( AItem: TMyItem): boolean of object;

function TMyList.BSearch(FindedProc: TFindedProc): Pointer;
var i: Integer;
  P: TMyItem;
begin
Result := nil;
with Self do begin
  for i:=0 to Count-1 do begin
    P := TMyItem(Items[i]);
    If FindedProc(p) then begin
      Result := P;
      exit;
    end;
  end;
end;
end;

Теперь когда те нужен поиск по имени пишешь

function TSameObj.FindByName(AItem: TMyItem): boolean;
begin
 Result := AItem.Name = FNeededName; // FNeededName - тот имя которое ты ищешь.
end;

Item := MyList.BSearch(FindByName);

нужен поиск по id

function TSameObj.FindById(AItem: TMyItem): boolean;
begin
 Result := AItem.Id = FNeededId;
end;

Item := MyList.BSearch(FindById);


← →
Elast   (2004-12-01 18:31) [2]

Спасибо. Буду пробовать.



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.031 c
1-1102273104
greg
2004-12-05 21:58
2004.12.19
простейшая тестирующая прожка


3-1100943105
Andrey V.
2004-11-20 12:31
2004.12.19
Не работает FB1.5


14-1101796819
uny
2004-11-30 09:40
2004.12.19
человеческий фактор или свобода?


6-1097126516
Sirus
2004-10-07 09:21
2004.12.19
Как запретить компу принимать и отправлять данные на опред. IP ?


1-1101912967
Elast
2004-12-01 17:56
2004.12.19
Поиск в TList




   Наверх