Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.048 c
3-1101115078
YurikGL
2004-11-22 12:17
2004.12.19
Выборка из процедуры.


1-1102198580
Tool
2004-12-05 01:16
2004.12.19
Как получить жётскую ссылку на элемент в TList, независимо от


14-1101816466
h00k
2004-11-30 15:07
2004.12.19
Помогите с задачкой


3-1100698086
ВицеЧайник
2004-11-17 16:28
2004.12.19
Делфи и SQL запрос с датой


1-1101907688
Артем Владимирович
2004-12-01 16:28
2004.12.19
Как блокироваться сочетание клавиш CTRL+N?