Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизПоиск в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c